411 |
let ++INTERFACE_CMDS_IDX |
let ++INTERFACE_CMDS_IDX |
412 |
} |
} |
413 |
|
|
414 |
|
## Usage: _generateMac <var> <iface> <ctx> |
415 |
|
function _generateMac |
416 |
|
{ |
417 |
|
isNumber "$2" || { |
418 |
|
echo $"Interface basename '$iface' must be either a number, or the mac must be configured explicitly" >&2 |
419 |
|
return 1 |
420 |
|
} |
421 |
|
|
422 |
|
eval $1=$(printf "f0:ff:%02x:%02x:%02x:%02x" $[ (~($2>>8)) & 0xff ] $[ ($2 & 0xff) ] $[ ($3>>8) & 0xff ] $[ $3 & 0xff ]) |
423 |
|
} |
424 |
|
|
425 |
## Usage: _processSingleInterface <interface-directory> |
## Usage: _processSingleInterface <interface-directory> |
426 |
function _processSingleInterface |
function _processSingleInterface |
427 |
{ |
{ |
434 |
local bcast |
local bcast |
435 |
local name |
local name |
436 |
local scope |
local scope |
437 |
|
local mac |
438 |
|
local extip |
439 |
|
local up="up" |
440 |
|
|
441 |
_getInterfaceValue ip '' "$iface" |
_getInterfaceValue ip '' "$iface" |
442 |
|
_getInterfaceValue extip '' "$iface" "$iface/.." |
443 |
_getInterfaceValue dev '' "$iface" "$iface/.." |
_getInterfaceValue dev '' "$iface" "$iface/.." |
444 |
_getInterfaceValue prefix '' "$iface" "$iface/.." |
_getInterfaceValue prefix '' "$iface" "$iface/.." |
445 |
_getInterfaceValue mask '' "$iface" "$iface/.." |
_getInterfaceValue mask '' "$iface" "$iface/.." |
446 |
_getInterfaceValue bcast '' "$iface" "$iface/.." |
_getInterfaceValue bcast '' "$iface" "$iface/.." |
447 |
_getInterfaceValue name '' "$iface" |
_getInterfaceValue name '' "$iface" |
448 |
_getInterfaceValue scope '' "$iface" "$iface/.." |
_getInterfaceValue scope '' "$iface" "$iface/.." |
449 |
|
_getInterfaceValue mac '' "$iface" |
450 |
|
|
451 |
test "$ip" || { echo $"Can not read ip for '$iface'" >&2; return 1; } |
test "$ip" || { echo $"Can not read ip for '$iface'" >&2; return 1; } |
452 |
|
|
453 |
test ! -e "$iface"/only_ip || { |
test ! -e "$iface"/only_ip || { |
454 |
|
## LEGACY ALERT |
455 |
echo $"The 'only_ip' flag for interface '$iface' is deprecated; use 'nodev' instead of" >&2 |
echo $"The 'only_ip' flag for interface '$iface' is deprecated; use 'nodev' instead of" >&2 |
456 |
unset dev |
unset dev |
457 |
} |
} |
458 |
test ! -e "$iface"/nodev || unset dev |
test ! -e "$iface"/nodev || unset dev |
459 |
|
test ! -e "$iface"/down || up= |
460 |
|
|
461 |
if test "$dev"; then |
if test "$dev"; then |
462 |
_transformMask2Prefix prefix "$prefix" "$mask" |
_transformMask2Prefix prefix "$prefix" "$mask" |
470 |
test -f /proc/net/vlan || { |
test -f /proc/net/vlan || { |
471 |
_addInterfaceCmd VCONFIG "${dev/./ }" |
_addInterfaceCmd VCONFIG "${dev/./ }" |
472 |
_addInterfaceCmd IP_ADDR 127.0.0.1/8 broadcast 127.255.255.255 dev "$dev" |
_addInterfaceCmd IP_ADDR 127.0.0.1/8 broadcast 127.255.255.255 dev "$dev" |
473 |
_addInterfaceCmd IP_LINK "$dev" |
_addInterfaceCmd IP_LINK "$dev" $up |
474 |
} |
} |
475 |
;; |
;; |
476 |
esac |
esac |
477 |
|
|
478 |
|
if ! test -e "$iface"/indirect; then |
479 |
|
_addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" broadcast ${bcast:-+} ${name:+label "$dev:$name"} dev "$dev" |
480 |
|
#_addInterfaceCmd IP_ROUTE "$ip${prefix:+/$prefix}" dev "$dev" |
481 |
|
_addInterfaceCmd IP_LINK "$dev" $up |
482 |
|
elif ! test "$ctx"; then |
483 |
|
echo $"Using 'dummy' (indirect) for interface '$dev' requires a fixed context number; dynamic ctx are not supported" >&2 |
484 |
|
return 1 |
485 |
|
else |
486 |
|
test "$mac" || _generateMac mac "$(basename $iface)" "$ctx" || return 1 |
487 |
|
_addInterfaceCmd MODPROBE dummy "$dev" |
488 |
|
_addInterfaceCmd IP_LINK dev dummy0 address "$mac" |
489 |
|
_addInterfaceCmd NAMEIF "$dev" "$mac" |
490 |
|
_addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" dev "$dev" |
491 |
|
test -z "$extip" || _addInterfaceCmd IPTABLES "$ip${prefix:+/$prefix}" ${name:+label "$dev:$name"} "$ctx" "$extip" |
492 |
|
fi |
493 |
INTERFACES=( "${INTERFACES[@]}" "$ip${prefix:+/$prefix}" ) |
INTERFACES=( "${INTERFACES[@]}" "$ip${prefix:+/$prefix}" ) |
|
_addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" broadcast ${bcast:-+} ${name:+label "$dev:$name"} dev "$dev" |
|
|
#_addInterfaceCmd IP_ROUTE "$ip${prefix:+/$prefix}" dev "$dev" |
|
|
_addInterfaceCmd IP_LINK "$dev" |
|
494 |
fi |
fi |
495 |
} |
} |
496 |
|
|
498 |
function _generateInterfaceOptions |
function _generateInterfaceOptions |
499 |
{ |
{ |
500 |
local iface |
local iface |
501 |
|
local ctx |
502 |
|
|
503 |
|
test ! -e "$1"/context || read ctx <"$1"/context |
504 |
|
|
505 |
for iface in "$1/interfaces/"*; do |
for iface in "$1/interfaces/"*; do |
506 |
test -d "$iface" || continue |
test -d "$iface" || continue |
520 |
eval var='( "${INTERFACE_CMDS_'$i'[@]}" )' |
eval var='( "${INTERFACE_CMDS_'$i'[@]}" )' |
521 |
local type=${var[0]} |
local type=${var[0]} |
522 |
unset var[0] |
unset var[0] |
523 |
|
|
524 |
|
set -- "${var[@]}" |
525 |
case "$type" in |
case "$type" in |
526 |
VCONFIG) $_VCONFIG add "${var[@]}";; |
IPTABLES) ;; ## TODO |
527 |
IP_ADDR) $_IP addr add "${var[@]}";; |
MODPROBE) |
528 |
IP_LINK) $_IP link set "${var[@]}" up;; |
local mod=$1 |
529 |
IP_ROUTE) $_IP route add "${var[@]}";; |
local name=$2 |
530 |
|
shift 2 |
531 |
|
$_MODPROBE ${name:+-o "$name"} "$mod" "$@" |
532 |
|
;; |
533 |
|
NAMEIF) $_NAMEIF "$@";; |
534 |
|
VCONFIG) $_VCONFIG add "$@";; |
535 |
|
IP_ADDR) $_IP addr add "$@";; |
536 |
|
IP_LINK) $_IP link set "$@";; |
537 |
|
IP_ROUTE) $_IP route add "$@";; |
538 |
*) echo "Unknown interface-command type '$type'" >&2; false;; |
*) echo "Unknown interface-command type '$type'" >&2; false;; |
539 |
esac |
esac |
540 |
|
|
556 |
local type=${var[0]} |
local type=${var[0]} |
557 |
unset var[0] |
unset var[0] |
558 |
|
|
559 |
|
set -- "${var[@]}" |
560 |
case "$type" in |
case "$type" in |
561 |
VCONFIG) $_VCONFIG rem "${var[@]}";; |
IPTABLES) ;; ## TODO |
562 |
IP_ADDR) $_IP addr del "${var[@]}";; |
MODPROBE) $_RMMOD "${2:-$1}";; |
563 |
|
NAMEIF) ;; |
564 |
|
VCONFIG) $_VCONFIG rem "$@";; |
565 |
|
IP_ADDR) $_IP addr del "$@";; |
566 |
IP_LINK) ;; ## Ignore the link-down command for now |
IP_LINK) ;; ## Ignore the link-down command for now |
567 |
IP_ROUTE) $_IP route del "${var[@]}";; |
IP_ROUTE) $_IP route del "$@";; |
568 |
*) echo "Unknown interface-command type '$type'" >&2; false;; |
*) echo "Unknown interface-command type '$type'" >&2; false;; |
569 |
esac |
esac |
570 |
done |
done |