@@ -79,15 +79,18 @@ def __init__(self, dvs):
79
79
self .neighTbl = swsscommon .Table (appl_db , "NEIGH_TABLE" )
80
80
81
81
def __del__ (self ):
82
- # Make sure no neighbors on vEthernet
83
- keys = self .neighTbl .getKeys ();
82
+ # Make sure no neighbors on physical interfaces
83
+ keys = self .neighTbl .getKeys ()
84
84
for key in keys :
85
- assert not key .startswith ("vEthernet" )
85
+ m = re .match ("eth(\d+)" , key )
86
+ if not m :
87
+ continue
88
+ assert int (m .group (1 )) > 0
86
89
87
90
class VirtualServer (object ):
88
91
def __init__ (self , ctn_name , pid , i ):
89
92
self .nsname = "%s-srv%d" % (ctn_name , i )
90
- self .vifname = "vEthernet %d" % (i * 4 )
93
+ self .pifname = "eth %d" % (i + 1 )
91
94
self .cleanup = True
92
95
93
96
# create netns
@@ -97,21 +100,21 @@ def __init__(self, ctn_name, pid, i):
97
100
ensure_system ("ip netns add %s" % self .nsname )
98
101
99
102
# create vpeer link
100
- ensure_system ("ip link add %s type veth peer name %s" % (self .nsname [0 :12 ], self .vifname ))
103
+ ensure_system ("ip link add %s type veth peer name %s" % (self .nsname [0 :12 ], self .pifname ))
101
104
ensure_system ("ip link set %s netns %s" % (self .nsname [0 :12 ], self .nsname ))
102
- ensure_system ("ip link set %s netns %d" % (self .vifname , pid ))
105
+ ensure_system ("ip link set %s netns %d" % (self .pifname , pid ))
103
106
104
107
# bring up link in the virtual server
105
108
ensure_system ("ip netns exec %s ip link set dev %s name eth0" % (self .nsname , self .nsname [0 :12 ]))
106
109
ensure_system ("ip netns exec %s ip link set dev eth0 up" % (self .nsname ))
107
110
ensure_system ("ip netns exec %s ethtool -K eth0 tx off" % (self .nsname ))
108
111
109
112
# bring up link in the virtual switch
110
- ensure_system ("nsenter -t %d -n ip link set dev %s up" % (pid , self .vifname ))
113
+ ensure_system ("nsenter -t %d -n ip link set dev %s up" % (pid , self .pifname ))
111
114
112
- # disable arp, so no neigh on vEthernet(s)
113
- ensure_system ("nsenter -t %d -n ip link set arp off dev %s" % (pid , self .vifname ))
114
- ensure_system ("nsenter -t %d -n sysctl -w net.ipv6.conf.%s.disable_ipv6=1" % (pid , self .vifname ))
115
+ # disable arp, so no neigh on physical interfaces
116
+ ensure_system ("nsenter -t %d -n ip link set arp off dev %s" % (pid , self .pifname ))
117
+ ensure_system ("nsenter -t %d -n sysctl -w net.ipv6.conf.%s.disable_ipv6=1" % (pid , self .pifname ))
115
118
116
119
def destroy (self ):
117
120
if self .cleanup :
@@ -188,6 +191,7 @@ def __init__(self, name=None, keeptb=False):
188
191
189
192
self .mount = "/var/run/redis-vs/{}" .format (ctn_sw_name )
190
193
194
+ self .net_cleanup ()
191
195
self .restart ()
192
196
else :
193
197
self .ctn_sw = self .client .containers .run ('debian:jessie' , privileged = True , detach = True ,
@@ -216,7 +220,7 @@ def __init__(self, name=None, keeptb=False):
216
220
# temp fix: remove them once they are moved to vs start.sh
217
221
self .ctn .exec_run ("sysctl -w net.ipv6.conf.default.disable_ipv6=0" )
218
222
for i in range (0 , 128 , 4 ):
219
- self .ctn .exec_run ("sysctl -w net.ipv6.conf.vEthernet %d.disable_ipv6=1" % i )
223
+ self .ctn .exec_run ("sysctl -w net.ipv6.conf.eth %d.disable_ipv6=1" % ( i + 1 ) )
220
224
self .check_ready ()
221
225
self .init_asicdb_validator ()
222
226
self .appldb = ApplDbValidator (self )
@@ -276,6 +280,29 @@ def check_ready(self, timeout=30):
276
280
277
281
time .sleep (1 )
278
282
283
+ def net_cleanup (self ):
284
+ """clean up network, remove extra links"""
285
+
286
+ re_space = re .compile ('\s+' )
287
+
288
+ res = self .ctn .exec_run ("ip link show" )
289
+ try :
290
+ out = res .output
291
+ except AttributeError :
292
+ out = res
293
+ for l in out .split ('\n ' ):
294
+ m = re .compile ('^\d+' ).match (l )
295
+ if not m :
296
+ continue
297
+ fds = re_space .split (l )
298
+ if len (fds ) > 1 :
299
+ pname = fds [1 ].rstrip (":" )
300
+ m = re .compile ("(eth|lo|Bridge|Ethernet)" ).match (pname )
301
+ if not m :
302
+ self .ctn .exec_run ("ip link del {}" .format (pname ))
303
+ print "remove extra link {}" .format (pname )
304
+ return
305
+
279
306
def restart (self ):
280
307
self .ctn .restart ()
281
308
0 commit comments