本文整理汇总了Python中pyroute2.IPRoute.route方法的典型用法代码示例。如果您正苦于以下问题:Python IPRoute.route方法的具体用法?Python IPRoute.route怎么用?Python IPRoute.route使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyroute2.IPRoute
的用法示例。
在下文中一共展示了IPRoute.route方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: set_net
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
def set_net(lease):
ipr = IPRoute()
try:
index = ipr.link_lookup(ifname=lease.interface)[0]
except IndexError as e:
logger.error('Interface %s not found, can not set IP.',
lease.interface)
try:
ipr.addr('add', index, address=lease.address,
mask=int(lease.subnet_mask_cidr))
except NetlinkError as e:
if ipr.get_addr(index=index)[0].\
get_attrs('IFA_ADDRESS')[0] == lease.address:
logger.debug('Interface %s is already set to IP %s' %
(lease.interface, lease.address))
else:
logger.error(e)
else:
logger.debug('Interface %s set to IP %s' %
(lease.interface, lease.address))
try:
ipr.route('add', dst='0.0.0.0', gateway=lease.router, oif=index)
except NetlinkError as e:
if ipr.get_routes(table=254)[0].\
get_attrs('RTA_GATEWAY')[0] == lease.router:
logger.debug('Default gateway is already set to %s' %
(lease.router))
else:
logger.error(e)
else:
logger.debug('Default gateway set to %s', lease.router)
ipr.close()
set_dns(lease)
示例2: condUnshareNet
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
def condUnshareNet(unshare_net=True):
if USE_NSPAWN and unshare_net:
try:
unshare(CLONE_NEWNET)
# Set up loopback interface and add default route via loopback in the namespace.
# Missing default route may confuse some software, see
# https://github.com/rpm-software-management/mock/issues/113
ipr = IPRoute()
dev = ipr.link_lookup(ifname='lo')[0]
ipr.link('set', index=dev, state='up')
ipr.route("add", dst="default", gateway="127.0.0.1")
except exception.UnshareFailed:
# IPC and UTS ns are supported since the same kernel version. If this
# fails, there had to be a warning already
pass
# pylint: disable=bare-except
except Exception as e:
getLog().warning("network namespace setup failed: %s", e)
示例3: configure_link
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
def configure_link(self, ip4_address, plen, gateway):
'''
Configure following attributes for interface inside the container
- Link-up
- IP Address
- Default gateway
'''
@staticmethod
def _intf_error(e, ifname, message):
raise Error(CNI_ERROR_CONFIG_NS_INTF, message + ifname +
' code ' + str(e.code) + ' message ' + e.message)
return
with CniNamespace(self.cni.container_netns):
iproute = IPRoute()
intf = iproute.link_lookup(ifname=self.cni.container_ifname)
if len(intf) == 0:
raise Error(CNI_ERROR_CONFIG_NS_INTF,
'Error finding interface ' +
self.cni.container_ifname + ' inside container')
idx_ns = intf[0]
try:
iproute.link('set', index=idx_ns, state='up')
except NetlinkError as e:
_intf_error(e, self.cni.container_ifname,
'Error setting link state for interface ' +
'inside container')
try:
iproute.addr('add', index=idx_ns, address=ip4_address,
prefixlen=plen)
except NetlinkError as e:
if e.code != errno.EEXIST:
_intf_error(e, self.cni.container_ifname,
'Error setting ip-address for interface ' +
'inside container')
try:
iproute.route('add', dst='0.0.0.0/0', gateway=gateway)
except NetlinkError as e:
if e.code != errno.EEXIST:
_intf_error(e, self.cni.container_ifname,
'Error adding default route inside container')
return
示例4: TestIPRoute
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
#.........这里部分代码省略.........
def test_fail_not_permitted(self):
try:
self.ip.addr('add', 1, address='172.16.0.1', mask=24)
except NetlinkError as e:
if e.code != 1: # Operation not permitted
raise
finally:
try:
self.ip.addr('delete', 1, address='172.16.0.1', mask=24)
except:
pass
def test_fail_no_such_device(self):
require_user('root')
dev = sorted([i['index'] for i in self.ip.get_links()])[-1] + 10
try:
self.ip.addr('add',
dev,
address='172.16.0.1',
mask=24)
except NetlinkError as e:
if e.code != 19: # No such device
raise
def test_remove_link(self):
require_user('root')
try:
self.ip.link_remove(self.ifaces[0])
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname=self.dev)) == 0
def test_get_route(self):
if not self.ip.get_default_routes(table=254):
return
rts = self.ip.get_routes(family=socket.AF_INET,
dst='8.8.8.8',
table=254)
assert len(rts) > 0
def test_flush_routes(self):
require_user('root')
self.ip.link('set', index=self.ifaces[0], state='up')
self.ip.addr('add', self.ifaces[0], address='172.16.0.2', mask=24)
self.ip.route('add',
prefix='172.16.1.0',
mask=24,
gateway='172.16.0.1',
table=100)
self.ip.route('add',
prefix='172.16.2.0',
mask=24,
gateway='172.16.0.1',
table=100)
assert grep('ip route show table 100',
pattern='172.16.1.0/24.*172.16.0.1')
assert grep('ip route show table 100',
pattern='172.16.2.0/24.*172.16.0.1')
self.ip.flush_routes(table=100)
assert not grep('ip route show table 100',
pattern='172.16.1.0/24.*172.16.0.1')
assert not grep('ip route show table 100',
示例5: TestIPRoute
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
#.........这里部分代码省略.........
ifaddr = self.ifaddr()
try:
self.ip.addr('add', 1, address=ifaddr, mask=24)
except NetlinkError as e:
if e.code != errno.EPERM: # Operation not permitted
raise
finally:
try:
self.ip.addr('delete', 1, address=ifaddr, mask=24)
except:
pass
def test_fail_no_such_device(self):
require_user('root')
ifaddr = self.ifaddr()
dev = sorted([i['index'] for i in self.ip.get_links()])[-1] + 10
try:
self.ip.addr('add',
dev,
address=ifaddr,
mask=24)
except NetlinkError as e:
if e.code != errno.ENODEV: # No such device
raise
def test_remove_link(self):
require_user('root')
try:
self.ip.link('del', index=self.ifaces[0])
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname=self.dev)) == 0
def _test_route_proto(self, proto, fake, spec=''):
require_user('root')
naddr = str(self.ipnets[1].network)
os.system('ip route add %s/24 via 127.0.0.1 %s' % (naddr, spec))
time.sleep(1)
assert grep('ip ro', pattern='%s/24.*127.0.0.1' % naddr)
try:
self.ip.route('del',
dst='%s/24' % naddr,
gateway='127.0.0.1',
proto=fake)
except NetlinkError:
pass
self.ip.route('del',
dst='%s/24' % naddr,
gateway='127.0.0.1',
proto=proto)
assert not grep('ip ro', pattern='%s/24.*127.0.0.1' % naddr)
def test_route_proto_static(self):
return self._test_route_proto('static', 'boot', 'proto static')
def test_route_proto_static_num(self):
return self._test_route_proto(4, 3, 'proto static')
def test_route_proto_boot(self):
return self._test_route_proto('boot', 4)
def test_route_proto_boot_num(self):
return self._test_route_proto(3, 'static')
示例6: TestIPRoute
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
#.........这里部分代码省略.........
def test_fail_not_permitted(self):
try:
self.ip.addr('add', 1, address='172.16.0.1', mask=24)
except NetlinkError as e:
if e.code != errno.EPERM: # Operation not permitted
raise
finally:
try:
self.ip.addr('delete', 1, address='172.16.0.1', mask=24)
except:
pass
def test_fail_no_such_device(self):
require_user('root')
dev = sorted([i['index'] for i in self.ip.get_links()])[-1] + 10
try:
self.ip.addr('add',
dev,
address='172.16.0.1',
mask=24)
except NetlinkError as e:
if e.code != errno.ENODEV: # No such device
raise
def test_remove_link(self):
require_user('root')
try:
self.ip.link_remove(self.ifaces[0])
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname=self.dev)) == 0
def test_route_get_target(self):
if not self.ip.get_default_routes(table=254):
return
rts = self.ip.get_routes(family=socket.AF_INET,
dst='8.8.8.8',
table=254)
assert len(rts) > 0
def test_route_get_by_spec(self):
self.ip.link('set', index=self.ifaces[0], state='up')
self.ip.addr('add', index=self.ifaces[0],
address='172.16.60.1', mask=24)
self.ip.addr('add', index=self.ifaces[0],
address='172.16.61.1', mask=24)
rts = self.ip.get_routes(family=socket.AF_INET,
dst=lambda x: x in ('172.16.60.0',
'172.16.61.0'))
assert len(rts) == 4
def test_route_multipath(self):
require_user('root')
self.ip.route('add',
dst='172.16.241.0',
mask=24,
multipath=[{'hops': 20,
'ifindex': 1,
'attrs': [['RTA_GATEWAY', '127.0.0.2']]},
{'hops': 30,
'ifindex': 1,
'attrs': [['RTA_GATEWAY', '127.0.0.3']]}])
assert grep('ip route show', pattern='172.16.241.0/24')
assert grep('ip route show', pattern='nexthop.*127.0.0.2.*weight 21')
assert grep('ip route show', pattern='nexthop.*127.0.0.3.*weight 31')
示例7: TestData
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
class TestData(object):
def setup(self):
create_link('dummyX', 'dummy')
self.release = Event()
self.ip = IPRoute()
self.dev = self.ip.link_lookup(ifname='dummyX')
def teardown(self):
self.ip.release()
self.release.set()
remove_link('dummyX')
remove_link('bala')
def test_add_addr(self):
require_user('root')
dev = self.dev[0]
self.ip.addr('add', dev, address='172.16.0.1', mask=24)
assert '172.16.0.1/24' in get_ip_addr()
def test_remove_link(self):
require_user('root')
create_link('bala', 'dummy')
dev = self.ip.link_lookup(ifname='bala')[0]
try:
self.ip.link_remove(dev)
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname='bala')) == 0
def test_route(self):
require_user('root')
create_link('bala', 'dummy')
dev = self.ip.link_lookup(ifname='bala')[0]
self.ip.link('set', index=dev, state='up')
self.ip.addr('add', dev, address='172.16.0.2', mask=24)
self.ip.route('add',
prefix='172.16.1.0',
mask=24,
gateway='172.16.0.1')
assert grep('ip route show', pattern='172.16.1.0/24.*172.16.0.1')
remove_link('bala')
def test_updown_link(self):
require_user('root')
dev = self.dev[0]
assert not (self.ip.get_links(dev)[0]['flags'] & 1)
try:
self.ip.link_up(dev)
except NetlinkError:
pass
assert self.ip.get_links(dev)[0]['flags'] & 1
try:
self.ip.link_down(dev)
except NetlinkError:
pass
assert not (self.ip.get_links(dev)[0]['flags'] & 1)
def test_callbacks_positive(self):
require_user('root')
dev = self.dev[0]
self.cb_counter = 0
self.ip.register_callback(_callback,
lambda e, x: x.get('index', None) == dev,
(self, ))
self.test_updown_link()
assert self.cb_counter > 0
self.ip.unregister_callback(_callback)
def test_callbacks_negative(self):
require_user('root')
self.cb_counter = 0
self.ip.register_callback(_callback,
lambda e, x: x.get('index', None) == 'bala',
(self, ))
self.test_updown_link()
assert self.cb_counter == 0
self.ip.unregister_callback(_callback)
def test_rename_link(self):
require_user('root')
dev = self.dev[0]
try:
self.ip.link_rename(dev, 'bala')
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname='bala')) == 1
try:
self.ip.link_rename(dev, 'dummyX')
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname='dummyX')) == 1
def test_rules(self):
assert len(get_ip_rules('-4')) == \
len(self.ip.get_rules(socket.AF_INET))
assert len(get_ip_rules('-6')) == \
len(self.ip.get_rules(socket.AF_INET6))
#.........这里部分代码省略.........
示例8: network_module
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
class network_module(PtyshModule):
IP = "IP"
IP_MASK = "IP/MASK"
STRING = "STRING"
def __init__(self):
super(network_module, self).__init__()
super(network_module, self).init_node("network", "network node")
super(network_module, self).add_command("link up", "set link state up", self.cmd_link_up, "link up [link name]")
super(network_module, self).add_command("link down", "set link state down", self.cmd_link_down, "link down [link name]")
super(network_module, self).add_command("ip add", "add ip address", self.cmd_ip_add, "ip add [link name] [ip] [mask] ( [broadcast] [primary] )")
super(network_module, self).add_command("route add", "add route address", self.cmd_route_add, "route add [default|ip|ip/mask] [ip|none] [interface]")
super(network_module, self).add_command("show link", "show link state", self.cmd_show_link, "show link [link name|none]")
super(network_module, self).add_command("show link all", "show all link statue", self.cmd_show_link, "show link all")
super(network_module, self).add_command("show route", "show route state", self.cmd_show_route, "show route")
self.iproute = IPRoute()
self.boarder_len = 60
def get_link_index(self, link_name):
index = self.iproute.link_lookup(ifname=link_name)
if len(index) != 0:
return index[0]
else:
raise ValueError("There is no interface.")
def check_ip_address(self, ip):
try:
ret = ip_address(ip)
except Exception:
try:
ret = ip_network(ip)
except Exception:
return self.STRING
return self.IP_MASK
return self.IP
def change_link_state(self, state):
index = self.get_link_index(args[0])
ret = self.iproute.link("set", index=index, state=state)
if ret[0]["header"]["error"] is not None:
raise Exception(ret[0]["header"]["error"])
def print_output_boarder(self, inner):
print ("=" * self.boarder_len) if inner else print ("-" * self.boarder_len)
def print_output_subject(self, subject):
subject_len = len(subject)
harf_boarder_len = int((self.boarder_len - (subject_len + 2)) / 2)
harf_boarder = "-" * harf_boarder_len
print ("%s %s %s" % (harf_boarder, subject, harf_boarder))
def print_key_value(self, key, value):
print ("%s : %s" % (key.ljust(25), value))
def print_ip_brief(self, idx, interface, state, ip):
print ("%s%s%s%s" % (idx.ljust(8), interface.ljust(15), state.ljust(10), ip.ljust(27)))
def print_route_table(self, index, dest, gateway, mask, interface):
print ("%s%s%s%s%s" % (index.ljust(8), dest.ljust(17), gateway.ljust(17), mask.ljust(8), interface))
##### cmd function. #####
def cmd_link_up(self, args):
self.change_link_state("up")
def cmd_link_down(self, args):
self.change_link_state("down")
def cmd_ip_add(self, args):
if len(args) < 3:
raise TypeError()
index = self.get_link_index(args[0])
ip = str(args[1])
mask = int(args[2])
broadcast = str(args[3]) if len(args) >= 4 else ""
primary = args[4] if len(args) == 5 else True
if primary:
self.iproute.flush_addr(index=index)
if broadcast:
ret = self.iproute.addr("add", index=index, address=ip, mask=mask, broadcast=broadcast)
else:
ret = self.iproute.addr("add", index=index, address=ip, mask=mask)
if len(ret):
raise Exception(ret)
def cmd_route_add(self, args):
if len(args) < 3:
raise TypeError()
dest = args[0]
#.........这里部分代码省略.........
示例9: TestData
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
class TestData(object):
def setup(self):
create_link('dummyX', 'dummy')
self.ip = IPRoute()
self.dev = self.ip.link_lookup(ifname='dummyX')
def teardown(self):
self.ip.release()
remove_link('dummyX')
remove_link('bala')
def test_nla_operators(self):
require_user('root')
dev = self.dev[0]
self.ip.addr('add', dev, address='172.16.0.1', mask=24)
self.ip.addr('add', dev, address='172.16.0.2', mask=24)
r = [x for x in self.ip.get_addr() if x['index'] == dev]
complement = r[0] - r[1]
intersection = r[0] & r[1]
assert complement.get_attr('IFA_ADDRESS') == '172.16.0.1'
assert complement.get_attr('IFA_LABEL') is None
assert complement['prefixlen'] == 0
assert complement['index'] == 0
assert intersection.get_attr('IFA_ADDRESS') is None
assert intersection.get_attr('IFA_LABEL') == 'dummyX'
assert intersection['prefixlen'] == 24
assert intersection['index'] == dev
def test_add_addr(self):
require_user('root')
dev = self.dev[0]
self.ip.addr('add', dev, address='172.16.0.1', mask=24)
assert '172.16.0.1/24' in get_ip_addr()
def test_remove_link(self):
require_user('root')
create_link('bala', 'dummy')
dev = self.ip.link_lookup(ifname='bala')[0]
try:
self.ip.link_remove(dev)
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname='bala')) == 0
def test_get_route(self):
if not self.ip.get_default_routes(table=254):
return
rts = self.ip.get_routes(family=socket.AF_INET,
dst='8.8.8.8',
table=254)
assert len(rts) > 0
def test_route_table_2048(self):
require_user('root')
create_link('bala', 'dummy')
dev = self.ip.link_lookup(ifname='bala')[0]
self.ip.link('set', index=dev, state='up')
self.ip.addr('add', dev, address='172.16.0.2', mask=24)
self.ip.route('add',
prefix='172.16.1.0',
mask=24,
gateway='172.16.0.1',
table=2048)
assert grep('ip route show table 2048',
pattern='172.16.1.0/24.*172.16.0.1')
remove_link('bala')
def test_updown_link(self):
require_user('root')
dev = self.dev[0]
assert not (self.ip.get_links(dev)[0]['flags'] & 1)
try:
self.ip.link_up(dev)
except NetlinkError:
pass
assert self.ip.get_links(dev)[0]['flags'] & 1
try:
self.ip.link_down(dev)
except NetlinkError:
pass
assert not (self.ip.get_links(dev)[0]['flags'] & 1)
def test_callbacks_positive(self):
require_user('root')
dev = self.dev[0]
self.cb_counter = 0
self.ip.register_callback(_callback,
lambda e, x: x.get('index', None) == dev,
(self, ))
self.test_updown_link()
assert self.cb_counter > 0
self.ip.unregister_callback(_callback)
def test_callbacks_negative(self):
require_user('root')
#.........这里部分代码省略.........
示例10: TestIPRoute
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
#.........这里部分代码省略.........
def test_fail_not_permitted(self):
try:
self.ip.addr('add', 1, address='172.16.0.1', mask=24)
except NetlinkError as e:
if e.code != errno.EPERM: # Operation not permitted
raise
finally:
try:
self.ip.addr('delete', 1, address='172.16.0.1', mask=24)
except:
pass
def test_fail_no_such_device(self):
require_user('root')
dev = sorted([i['index'] for i in self.ip.get_links()])[-1] + 10
try:
self.ip.addr('add',
dev,
address='172.16.0.1',
mask=24)
except NetlinkError as e:
if e.code != errno.ENODEV: # No such device
raise
def test_remove_link(self):
require_user('root')
try:
self.ip.link('del', index=self.ifaces[0])
except NetlinkError:
pass
assert len(self.ip.link_lookup(ifname=self.dev)) == 0
def _test_route_proto(self, proto, fake, spec=''):
require_user('root')
os.system('ip route add 172.16.3.0/24 via 127.0.0.1 %s' % spec)
time.sleep(1)
assert grep('ip ro', pattern='172.16.3.0/24.*127.0.0.1')
try:
self.ip.route('del',
dst='172.16.3.0/24',
gateway='127.0.0.1',
proto=fake)
except NetlinkError:
pass
self.ip.route('del',
dst='172.16.3.0/24',
gateway='127.0.0.1',
proto=proto)
assert not grep('ip ro', pattern='172.16.3.0/24.*127.0.0.1')
def test_route_proto_static(self):
return self._test_route_proto('static', 'boot', 'proto static')
def test_route_proto_static_num(self):
return self._test_route_proto(4, 3, 'proto static')
def test_route_proto_boot(self):
return self._test_route_proto('boot', 4)
def test_route_proto_boot_num(self):
return self._test_route_proto(3, 'static')
def test_route_oif_as_iterable(self):
示例11:
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
netns.create('test')
# create VETH pair and move v0p1 to netns 'test'
ip.link_create(ifname='v0p0', peer='v0p1', kind='veth')
idx = ip.link_lookup(ifname='v0p1')[0]
ip.link('set',
index=idx,
net_ns_fd='test')
# bring v0p0 up and add an address
idx = ip.link_lookup(ifname='v0p0')[0]
ip.link('set',
index=idx,
state='up')
ip.addr('add',
index=idx,
address='10.0.0.1',
broadcast='10.0.0.255',
prefixlen=24)
# create a route with metrics
ip.route('add',
dst='172.16.0.0/24',
gateway='10.0.0.10',
metrics={'mtu': 1400,
'hoplimit': 16})
# release Netlink socket
ip.close()
示例12: main
# 需要导入模块: from pyroute2 import IPRoute [as 别名]
# 或者: from pyroute2.IPRoute import route [as 别名]
def main(argv):
if (len(argv) != 2):
print('Usage: python pvdtest_veth.py PVD_ID')
print('PVD_ID := name of the interface that contains PvD-related network configuration')
sys.exit()
# Get user-entered PVD ID
pvdId = sys.argv[1]
# Create IPRoute object for manipulation with a default network namespace
ipMain = IPRoute()
# Create a PvD-related network namespace
pvdNetnsName = getPvdNetnsName(pvdId);
if (pvdNetnsName in netns.listnetns()):
netns.remove(pvdNetnsName)
netns.create(pvdNetnsName)
# Create IPRoute object for manipulation with a PvD-related network namespace
netns.setns(pvdNetnsName)
ipPvd = IPRoute()
# Activate loopback interface in a PvD-related network namespace
loIndex = ipPvd.link_lookup(ifname='lo')[0]
ipPvd.link_up(loIndex)
# Get addresses from a PvD-related network interface
pvdIfIndex = ipMain.link_lookup(ifname=getPvdIfName(pvdId))[0]
pvdAddresses = ipMain.get_addr(index=pvdIfIndex)
# Get current routes
pvdRoutes = ipMain.get_routes()
# Create bridge
bridge = getPvdBridgeName(pvdId)
ipMain.link_create(ifname=bridge, kind='bridge')
# Create veth interface
(veth0, veth1) = getPvdVethNames(pvdId)
ipMain.link_create(ifname=veth0, kind='veth', peer=veth1)
# Move one end of the veth interafce to a PvD-related network namespace
veth1Index = ipMain.link_lookup(ifname=veth1)[0]
ipMain.link('set', index=veth1Index, net_ns_fd=pvdNetnsName)
# Shut down and remove addresses from the PvD interface before adding it to the bridge
ipMain.link_down(pvdIfIndex)
ipMain.flush_addr(pvdIfIndex)
# Make a bridge between PvD interface and one end of veth interface
veth0Index = ipMain.link_lookup(ifname=veth0)[0]
bridgeIndex = ipMain.link_lookup(ifname=bridge)[0]
ipMain.link('set', index=veth0Index, master=bridgeIndex)
ipMain.link('set', index=pvdIfIndex, master=bridgeIndex)
# Activate bridge and connected interfaces
ipMain.link_up(pvdIfIndex)
ipMain.link_up(veth0Index)
ipMain.link_up(bridgeIndex)
ipPvd.link_up(veth1Index)
# Configure bridge and another end of the veth interface with PvD-related network parameters + add routes
ipMain.flush_routes()
ipPvd.flush_routes()
for address in pvdAddresses:
ipAddress = broadcastAddress = netmask = addrFamily = None
for attr in address['attrs']:
if attr[0] == 'IFA_ADDRESS':
ipAddress = attr[1]
if attr[0] == 'IFA_BROADCAST':
broadcastAddress = attr[1]
netmask = address['prefixlen']
addrFamily = address['family']
# Configure bridge
try:
ipMain.addr('add', index=bridgeIndex, family=addrFamily, address=ipAddress, broadcast=broadcastAddress, mask=netmask)
except:
pass
# Configure veth
try:
ipPvd.addr('add', index=veth1Index, family=addrFamily, address=ipAddress, broadcast=broadcastAddress, mask=netmask)
except:
pass
# Configure routes
# Some routes are added during interface IP address/netmask configuration, skip them if already there
ipNetwork = IPNetwork(ipAddress + '/' + str(netmask))
try:
ipMain.route('add', dst=str(ipNetwork.network), mask=netmask, oif=bridgeIndex, src=ipAddress, rtproto='RTPROT_STATIC', rtscope='RT_SCOPE_LINK')
except:
pass
try:
ipPvd.route('add', dst=str(ipNetwork.network), mask=netmask, oif=veth1Index, src=ipAddress, rtproto='RTPROT_STATIC', rtscope='RT_SCOPE_LINK')
except:
pass
# Fing gateway(s) and add default routes
defGateways = []
for route in pvdRoutes:
for attr in route['attrs']:
if (attr[0] == 'RTA_GATEWAY' and attr[1] not in defGateways):
#.........这里部分代码省略.........