Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions scripts/neighbor_advertiser
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import argparse
import json
import os
import requests
import subprocess
import sys
import time
import traceback
Expand Down Expand Up @@ -227,6 +228,22 @@ def get_vlan_addr_prefix(vlan_intf_name, ip_ver):

return vlan_addr, vlan_prefix

def get_link_local_addr(vlan_interface):
try:
out = subprocess.check_output(['ip', '-6', 'addr', 'show', vlan_interface])
out = out.decode('UTF-8')
for line in out.splitlines():
keys = line.split()
if keys[0] == 'inet6':
ip = IPNetwork(keys[1])
if str(ip.ip).startswith("fe80"):
# Link local ipv6 address
return str(ip.ip)
except Exception:
log.log_error('failed to get %s addresses from o.s.' % vlan_interface)

return None


def get_vlan_addresses(vlan_interface):
vlan_id = get_vlan_interface_vlan_id(vlan_interface)
Expand All @@ -236,6 +253,12 @@ def get_vlan_addresses(vlan_interface):
ipv4_addr, ipv4_prefix = get_vlan_addr_prefix(vlan_interface, 4)
ipv6_addr, ipv6_prefix = get_vlan_addr_prefix(vlan_interface, 6)

if len(ipv6_addr):
link_local_addr = get_link_local_addr(vlan_interface)
if link_local_addr and link_local_addr not in ipv6_addr:
ipv6_addr.append(link_local_addr)
ipv6_prefix.append('128')

metadata = config_db.get_table('DEVICE_METADATA')
mac_addr = metadata['localhost']['mac']
if not mac_addr:
Expand Down