]> git.entuzijast.net Git - imunes.git/commitdiff
Restore automatic default route generation for pc and host nodes on
authormarko <marko>
Fri, 4 Nov 2005 10:26:09 +0000 (10:26 +0000)
committermarko <marko>
Fri, 4 Nov 2005 10:26:09 +0000 (10:26 +0000)
new link creation.

Bug found by: Gordan Gledec
Submitted by:
Requested by:
Reviewed by:
Approved by:
Obtained from:

editor.tcl
ipv4.tcl
ipv6.tcl

index 8d5cae88df7e69c9b563051ec785ff84178f7557..85fd7ad2f2c4e795c2376fd3fc794a58ef543530 100755 (executable)
@@ -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
index cfaf376396ef96c3bd3b9f7a89bc1a55c2cc5bda..ac4c05aaa2a09347bb6b41ac4d95d934e626bf17 100755 (executable)
--- 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
 }
 
 
index 02517f9b591b47653cdbd5e6617f20775972765b..5d53f1924aed8c225844b90212b4cb75d9740c66 100755 (executable)
--- 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
+       }
+    }
 }