From: marko Date: Fri, 4 Nov 2005 10:26:09 +0000 (+0000) Subject: Restore automatic default route generation for pc and host nodes on X-Git-Url: https://git.entuzijast.net/?a=commitdiff_plain;h=d5e3474c702df17f0e7c4c3a29c392e18e6b46e7;p=imunes.git Restore automatic default route generation for pc and host nodes on new link creation. Bug found by: Gordan Gledec Submitted by: Requested by: Reviewed by: Approved by: Obtained from: --- diff --git a/editor.tcl b/editor.tcl index 8d5cae8..85fd7ad 100755 --- a/editor.tcl +++ b/editor.tcl @@ -819,12 +819,26 @@ proc newLink { lnode1 lnode2 atomic } { setLinkMirror $link2 $link1 if {[[typemodel $lnode1].layer] == "NETWORK" } { - autoIPv4addr $lnode1 [ifcByPeer $lnode1 $pnode1] - autoIPv6addr $lnode1 [ifcByPeer $lnode1 $pnode1] + set ifc1 [ifcByPeer $lnode1 $pnode1] + autoIPv4addr $lnode1 $ifc1 + autoIPv6addr $lnode1 $ifc1 } if {[[typemodel $lnode2].layer] == "NETWORK" } { - autoIPv4addr $lnode2 [ifcByPeer $lnode2 $pnode2] - autoIPv6addr $lnode2 [ifcByPeer $lnode2 $pnode2] + set ifc2 [ifcByPeer $lnode2 $pnode2] + autoIPv4addr $lnode2 $ifc2 + autoIPv6addr $lnode2 $ifc2 + } + if {[[typemodel $lnode1].layer] == "NETWORK" && + [nodeType $lnode1] != "router" } { + set ifc1 [ifcByPeer $lnode1 $pnode1] + autoIPv4defaultroute $lnode1 $ifc1 + autoIPv6defaultroute $lnode1 $ifc1 + } + if {[[typemodel $lnode2].layer] == "NETWORK" && + [nodeType $lnode2] != "router" } { + set ifc2 [ifcByPeer $lnode2 $pnode2] + autoIPv4defaultroute $lnode2 $ifc2 + autoIPv6defaultroute $lnode2 $ifc2 } # @@ -921,6 +935,18 @@ proc newLink { lnode1 lnode2 atomic } { autoIPv4addr $lnode2 $ifname2 autoIPv6addr $lnode2 $ifname2 } + if { [nodeType $lnode1] != "router" && + [nodeType $lnode2] != "pseudo" && + [[typemodel $lnode1].layer] == "NETWORK" } { + autoIPv4defaultroute $lnode1 $ifname1 + autoIPv6defaultroute $lnode1 $ifname1 + } + if { [nodeType $lnode2] != "router" && + [nodeType $lnode1] != "pseudo" && + [[typemodel $lnode2].layer] == "NETWORK" } { + autoIPv4defaultroute $lnode2 $ifname2 + autoIPv6defaultroute $lnode2 $ifname2 + } if { [getNodeCanvas $lnode1] == $curcanvas } { drawLink $link diff --git a/ipv4.tcl b/ipv4.tcl index cfaf376..ac4c05a 100755 --- a/ipv4.tcl +++ b/ipv4.tcl @@ -62,9 +62,9 @@ proc autoIPv4addr { node iface } { if { [[typemodel $node].layer] != "NETWORK" } { # - # Shouldn't get called at all in this case + # Shouldn't get called at all for link-layer nodes # -puts "autoIPv4 shouldn't get called for non-network layer nodes" + puts "autoIPv4 called for a [[typemodel $node].layer] layer node" return "" } setIfcIPv4addr $node $iface "" @@ -114,30 +114,45 @@ puts "autoIPv4 shouldn't get called for non-network layer nodes" } -proc findLANdgIPv4 { bridge } { - foreach ifc [ifcList $bridge] { - set peer [peerByIfc $bridge $ifc] - set peer_if [ifcByPeer $peer $bridge] - set peer_ipaddr [getIfcIPv4addr $peer $peer_if] - if { [nodeType $peer] == "router" } { - return [lindex [split $peer_ipaddr /] 0] - } +proc autoIPv4defaultroute { node iface } { + if { [[typemodel $node].layer] != "NETWORK" } { + # + # Shouldn't get called at all for link-layer nodes + # + puts "autoIPv4defaultroute called for [[typemodel $node].layer] node" + return } -} + set peer_node [logicalPeerByIfc $node $iface] -proc updateLANdg { bridge } { - set gw [findLANdgIPv4 $bridge] - if { $gw == "" } { - return - } - foreach ifc [ifcList $bridge] { - set peer [peerByIfc $bridge $ifc] - if { [nodeType $peer] == "pc" || [nodeType $peer] == "host" } { - setStatIPv4routes $peer [list "0.0.0.0/0 $gw"] - } + if { [[typemodel $peer_node].layer] == "LINK" } { + foreach l2node [listLANnodes $peer_node {}] { + foreach ifc [ifcList $l2node] { + set peer [logicalPeerByIfc $l2node $ifc] + if { [nodeType $peer] != "router" } { + continue + } + set peer_if [ifcByLogicalPeer $peer $l2node] + set peer_ip4addr [getIfcIPv4addr $peer $peer_if] + if { $peer_ip4addr != "" } { + set gw [lindex [split $peer_ip4addr /] 0] + setStatIPv4routes $node [list "0.0.0.0/0 $gw"] + return + } + } + } + } else { + if { [nodeType $peer_node] != "router" } { + return + } + set peer_if [ifcByLogicalPeer $peer_node $node] + set peer_ip4addr [getIfcIPv4addr $peer_node $peer_if] + if { $peer_ip4addr != "" } { + set gw [lindex [split $peer_ip4addr /] 0] + setStatIPv4routes $node [list "0.0.0.0/0 $gw"] + return + } } - return } diff --git a/ipv6.tcl b/ipv6.tcl index 02517f9..5d53f19 100755 --- a/ipv6.tcl +++ b/ipv6.tcl @@ -102,7 +102,46 @@ proc autoIPv6addr { node iface } { return } -proc newLANIPv6 { l3node bridge } { + +proc autoIPv6defaultroute { node iface } { + if { [[typemodel $node].layer] != "NETWORK" } { + # + # Shouldn't get called at all for link-layer nodes + # + puts "autoIPv6defaultroute called for [[typemodel $node].layer] node" + return + } + + set peer_node [logicalPeerByIfc $node $iface] + + if { [[typemodel $peer_node].layer] == "LINK" } { + foreach l2node [listLANnodes $peer_node {}] { + foreach ifc [ifcList $l2node] { + set peer [logicalPeerByIfc $l2node $ifc] + if { [nodeType $peer] != "router" } { + continue + } + set peer_if [ifcByLogicalPeer $peer $l2node] + set peer_ip6addr [getIfcIPv6addr $peer $peer_if] + if { $peer_ip6addr != "" } { + set gw [lindex [split $peer_ip6addr /] 0] + setStatIPv6routes $node [list "::/0 $gw"] + return + } + } + } + } else { + if { [nodeType $peer_node] != "router" } { + return + } + set peer_if [ifcByLogicalPeer $peer_node $node] + set peer_ip6addr [getIfcIPv6addr $peer_node $peer_if] + if { $peer_ip6addr != "" } { + set gw [lindex [split $peer_ip6addr /] 0] + setStatIPv6routes $node [list "::/0 $gw"] + return + } + } }