]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: addressvirtual: new attribute: address-virtual-ipv6-addrgen [on|off]
authorJulien Fortin <julien@cumulusnetworks.com>
Mon, 18 Jun 2018 14:51:51 +0000 (16:51 +0200)
committerJulien Fortin <julien@cumulusnetworks.com>
Tue, 19 Jun 2018 07:27:33 +0000 (09:27 +0200)
[14:53:46] root:~ # ifquery -a
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto vlan1903
iface vlan1903
alias LAB-CUST-VMS
vlan-id 1903
vlan-raw-device bridge
address 2a06:c01:1:1903::3/64
address 185.98.123.3/24
address-virtual 00:00:5e:00:01:a3 2a06:c01:1:1903::1/64 fe80::1/64 185.98.123.1/24
vrf public

auto public
iface public
vrf-table auto

auto bridge
iface bridge
bridge-ports swp1

[14:53:47] root:~ # ifup -a
[14:53:50] root:~ # ip addr show vlan1903-v0
46: vlan1903-v0@vlan1903: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master public state UP group default
    link/ether 00:00:5e:00:01:a3 brd ff:ff:ff:ff:ff:ff
    inet 185.98.123.1/24 scope global vlan1903-v0
       valid_lft forever preferred_lft forever
    inet6 2a06:c01:1:1903::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::200:5eff:fe00:1a3/64 scope link
       valid_lft forever preferred_lft forever
    inet6 fe80::1/64 scope link
       valid_lft forever preferred_lft forever
[14:53:52] root:~ #
[14:53:54] root:~ #
[14:53:54] root:~ # nano /etc/network/interfaces
[14:53:57] root:~ # ifquery vlan1903
auto vlan1903
iface vlan1903
alias LAB-CUST-VMS
vlan-id 1903
vlan-raw-device bridge
address 2a06:c01:1:1903::3/64
address 185.98.123.3/24
address-virtual 00:00:5e:00:01:a3 2a06:c01:1:1903::1/64 fe80::1/64 185.98.123.1/24
address-virtual-ipv6-addrgen off
vrf public

[14:54:05] root:~ # ifdown -a -X eth0
[14:54:08] root:~ # ifup -a -v
...
...
info: executing /bin/ip -force -batch - [link set dev vlan1903-v0 master public
link set dev vlan1903-v0 addrgenmode none
link set dev vlan1903-v0 down
link set dev vlan1903-v0 address 00:00:5e:00:01:a3
link set dev vlan1903-v0 up
addr add 2a06:c01:1:1903::1/64 dev vlan1903-v0
addr add fe80::1/64 dev vlan1903-v0
addr add 185.98.123.1/24 dev vlan1903-v0
route del 2a06:c01:1:1903::/64 table 1001 dev vlan1903-v0
route del fe80::/64 table 1001 dev vlan1903-v0
route add 2a06:c01:1:1903::/64 table 1001 dev vlan1903-v0 proto kernel metric 9999
route add fe80::/64 table 1001 dev vlan1903-v0 proto kernel metric 9999
]
...
...
[14:54:14] root:~ # ip addr show vlan1903-v0
50: vlan1903-v0@vlan1903: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master public state UP group default
    link/ether 00:00:5e:00:01:a3 brd ff:ff:ff:ff:ff:ff
    inet 185.98.123.1/24 scope global vlan1903-v0
       valid_lft forever preferred_lft forever
    inet6 2a06:c01:1:1903::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::1/64 scope link
       valid_lft forever preferred_lft forever
[14:54:16] root:~ #

Reviewed-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
ifupdown2/addons/addressvirtual.py

index 01b7ed48aa880079c957493cb3c5db44bcf9346c..bf6531dcb35efb33330868e9b2be26c36c770c1d 100644 (file)
@@ -11,6 +11,7 @@ from ipaddr import IPNetwork, IPv6Network
 
 try:
     from ifupdown2.ifupdown.iface import *
+    from ifupdown2.ifupdown.utils import utils
     from ifupdown2.ifupdown.netlink import netlink
 
     from ifupdown2.ifupdownaddons.LinkUtils import LinkUtils
@@ -21,6 +22,7 @@ try:
     import ifupdown2.ifupdown.ifupdownconfig as ifupdownconfig
 except ImportError:
     from ifupdown.iface import *
+    from ifupdown.utils import utils
     from ifupdown.netlink import netlink
 
     from ifupdownaddons.LinkUtils import LinkUtils
@@ -42,8 +44,18 @@ class addressvirtual(moduleBase):
                         { 'help' : 'bridge router virtual mac and ips',
                           'multivalue' : True,
                           'validvals' : ['<mac-ip/prefixlen-list>',],
-                          'example' : ['address-virtual 00:11:22:33:44:01 11.0.1.1/24 11.0.1.2/24']}
-                 }}
+                          'example': ['address-virtual 00:11:22:33:44:01 11.0.1.1/24 11.0.1.2/24']
+                          },
+                    'address-virtual-ipv6-addrgen': {
+                        'help': 'enable disable ipv6 link addrgenmode',
+                        'validvals': ['on', 'off'],
+                        'default': 'on',
+                        'example': [
+                            'address-virtual-ipv6-addrge on',
+                            'address-virtual-ipv6-addrge off'
+                        ]
+                    }
+                }}
 
 
     def __init__(self, *args, **kargs):
@@ -178,6 +190,14 @@ class addressvirtual(moduleBase):
                 maclist.append(macip[0])
         return maclist
 
+    def get_addressvirtual_ipv6_addrgen_user_conf(self, ifaceobj):
+        ipv6_addrgen = ifaceobj.get_attr_value_first('address-virtual-ipv6-addrgen')
+
+        if ipv6_addrgen:
+            return True, utils.get_boolean_from_string(ipv6_addrgen)
+
+        return False, None
+
     def _apply_address_config(self, ifaceobj, address_virtual_list):
         purge_existing = False if ifupdownflags.flags.PERFMODE else True
 
@@ -186,6 +206,8 @@ class addressvirtual(moduleBase):
             if ifaceobj.lowerifaces and address_virtual_list:
                 update_mtu = True
 
+        should_configure_ipv6_addrgen, ipv6_addrgen_user_value = self.get_addressvirtual_ipv6_addrgen_user_conf(ifaceobj)
+
         hwaddress = []
         self.ipcmd.batch_start()
         av_idx = 0
@@ -217,6 +239,9 @@ class addressvirtual(moduleBase):
             if (ifaceobj.link_privflags & ifaceLinkPrivFlags.VRF_SLAVE):
                 self._handle_vrf_slaves(macvlan_ifacename, ifaceobj)
 
+            if should_configure_ipv6_addrgen:
+                self.ipcmd.ipv6_addrgen(macvlan_ifacename, ipv6_addrgen_user_value)
+
             ips = av_attrs[1:]
             if mac != 'None':
                 mac = mac.lower()