]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: address: new attribute: ipv6-addrgen [on/off]
authorJulien Fortin <julien@cumulusnetworks.com>
Mon, 18 Jun 2018 16:57:20 +0000 (18:57 +0200)
committerJulien Fortin <julien@cumulusnetworks.com>
Thu, 13 Dec 2018 22:42:35 +0000 (14:42 -0800)
[14:49:15] root:~ # ifquery swp2
auto swp2
iface swp2

[14:49:18] root:~ # ip addr show swp2
4: swp2: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 90:e2:ba:2c:b2:95 brd ff:ff:ff:ff:ff:ff
[14:49:20] root:~ # ifup swp2
[14:49:23] root:~ # ip addr show swp2
4: swp2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 90:e2:ba:2c:b2:95 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::92e2:baff:fe2c:b295/64 scope link
       valid_lft forever preferred_lft forever
[14:49:25] root:~ #
[14:49:32] root:~ # nano /etc/network/interfaces
[14:49:34] root:~ # ifquery swp2
auto swp2
iface swp2
        ipv6-addrgen off

[14:49:41] root:~ # ifup -v swp2 |& grep addrgen
link set dev swp2 addrgenmode none
[14:49:57] root:~ # ip addr show swp2
4: swp2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 90:e2:ba:2c:b2:95 brd ff:ff:ff:ff:ff:ff
[14:50:01] root:~ #
[14:50:09] root:~ #
[14:50:09] root:~ # ifup -v swp2
info: executing /bin/ip -force -batch - [link set dev swp2 down
link set dev swp2 addrgenmode none
link set dev swp2 up
]
info: reading '/proc/sys/net/ipv4/conf/swp2/accept_local'
[14:50:13] root:~ #

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

index dc43f778c87e0468e501df69352e5d1858ee2c8f..5d34b684187cde52013734562a435abd1e350bf6 100644 (file)
@@ -109,6 +109,15 @@ class address(moduleBase):
                               'validvals': ['yes', 'no'],
                               'default' : 'no',
                               'example' : ['mpls-enable yes']},
+                    'ipv6-addrgen': {
+                        'help': 'enable disable ipv6 link addrgenmode',
+                        'validvals': ['on', 'off'],
+                        'default': 'on',
+                        'example': [
+                            'ipv6-addrgen on',
+                            'ipv6-addrgen off'
+                        ]
+                    }
                 }}
 
     def __init__(self, *args, **kargs):
@@ -741,6 +750,11 @@ class address(moduleBase):
 
         self._process_mtu_config(ifaceobj, ifaceobj_getfunc, mtu)
 
+    def up_ipv6_addrgen(self, ifaceobj):
+        ipv6_addrgen = ifaceobj.get_attr_value_first('ipv6-addrgen')
+        if ipv6_addrgen:
+            self.ipcmd.ipv6_addrgen(ifaceobj.name, utils.get_boolean_from_string(ipv6_addrgen))
+
     def _up(self, ifaceobj, ifaceobj_getfunc=None):
         if not self.ipcmd.link_exists(ifaceobj.name):
             return
@@ -778,6 +792,8 @@ class address(moduleBase):
             pass
 
         self.ipcmd.batch_start()
+        self.up_ipv6_addrgen(ifaceobj)
+
         if addr_method != "dhcp":
             self._inet_address_config(ifaceobj, ifaceobj_getfunc,
                                       force_reapply)
index feb513cba2faf3c5a22be45a9c7aa2280a054735..524cc340d053daab9f4bd344ed68a4d642cca689 100644 (file)
@@ -2574,3 +2574,19 @@ class LinkUtils(utilsBase):
             return os.listdir('/sys/class/net/%s/brif/' % bridgename)
         except:
             return []
+
+    def ipv6_addrgen(self, ifname, addrgen):
+        cmd = 'link set dev %s addrgenmode %s' % (ifname, 'eui64' if addrgen else 'none')
+
+        is_link_up = self.is_link_up(ifname)
+
+        if is_link_up:
+            self.link_down(ifname)
+
+        if LinkUtils.ipbatch:
+            self.add_to_batch(cmd)
+        else:
+            utils.exec_command('%s %s' % (utils.ip_cmd, cmd))
+
+        if is_link_up:
+            self.link_up(ifname)