Skip to content

Commit

Permalink
Add CLI support for ipv6 helper and DHCPv6 Relay counter
Browse files Browse the repository at this point in the history
  • Loading branch information
kellyyeh committed Aug 25, 2021
1 parent 71e8b0c commit 453d419
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import click
sys.path.insert(0, '../../show/plugins/')
import show_dhcp6relay_counters


# sonic-clear dhcp6relay_counters
@click.command()
@click.option('-i', '--interface', required=False)
@click.option('--verbose', is_flag=True, help="Enable verbose output")
def dhcp6relay_counter_clear(interface, verbose):
"""Clear dhcp6relay message counts"""

counter = DHCPv6_Counter()
counter_intf = counter.get_interface()

if interface:
counter.clear_table(interface)
else:
for intf in counter_intf:
counter.clear_table(intf)

def register(cli):
cli.add_command(dhcp6relay_counter_clear)
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import click
import utilities_common.cli as clicommon

import argparse
import sys
from tabulate import tabulate

from swsscommon.swsscommon import SonicV2Connector


# STATE_DB Table
DHCPv6_COUNTER_TABLE = 'DHCPv6_COUNTER_TABLE'

# DHCPv6 Counter Messages
messages = ["Solicit", "Advertise", "Request", "Confirm", "Renew", "Rebind", "Reply", "Release", "Decline", "Relay-Forward", "Relay-Reply"]

class DHCPv6_Counter(object):
def __init__(self):
self.db = SonicV2Connector(use_unix_socket_path=False)
self.db.connect(self.db.STATE_DB)
self.table_name = DHCPv6_COUNTER_TABLE + self.db.get_db_separator(self.db.STATE_DB)


def get_interface(self):
vlans = []
for key in self.db.keys(self.db.STATE_DB):
if DHCPv6_COUNTER_TABLE in key:
vlans.append(key[21:])
return vlans


def get_dhcp6relay_msg_count(self, interface, msg):
count = self.db.get(self.db.STATE_DB, self.table_name + str(interface), str(msg))
data = [str(msg), count]
return data


def clear_table(self, interface):
for msg in messages:
self.db.set(self.db.STATE_DB, self.table_name + str(interface), str(msg), '0')

def print_count(counter, intf):
data = []
for i in messages:
data.append(counter.get_dhcp6relay_msg_count(intf, i))
print(tabulate(data, headers = ["Message Type", intf], tablefmt='simple', stralign='right') + "\n")


#
# 'dhcp6relay_counters' group ###
#


@click.group(cls=clicommon.AliasedGroup)
def dhcp6relay_counters():
"""Show DHCPv6 counter"""
pass


# 'counts' subcommand ("show dhcp6relay_counters counts")
@dhcp6relay_counters.command('counts')
@click.option('-i', '--interface', required=False)
@click.option('--verbose', is_flag=True, help="Enable verbose output")
def counts(interface, verbose):
"""Show dhcp6relay message counts"""

counter = DHCPv6_Counter()
counter_intf = counter.get_interface()

if interface:
print_count(counter, interface)
else:
for intf in counter_intf:
print_count(counter, intf)


def register(cli):
cli.commands['dhcp6realy_counters'].add_command(dhcp6relay_counters)
31 changes: 31 additions & 0 deletions dockers/docker-dhcp-relay/cli/show/plugins/show_dhcpv6_helper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import click
from tabulate import tabulate
from swsscommon.swsscommon import ConfigDBConnector

import utilities_common.cli as clicommon

DHCP_RELAY = 'DHCP_RELAY'

@click.group(cls=clicommon.AliasedGroup, name="dhcp_relay_helper")
def dhcp_relay_helper():
"""Show DHCP_Relay helper information"""
pass

@dhcp_relay_helper.command('ip')
def get_dhcpv6_helper_address():
config_db = ConfigDBConnector()
if config_db is not None:
config_db.connect()
table_data = config_db.get_table(DHCP_RELAY)
if table_data is not None:
for vlan in config_db.get_keys(DHCP_RELAY):
vlan_data = table_data.get(vlan)
helpers_data = vlan_data.get('dhcpv6_server')
if helpers_data is not None:
addr = {vlan:[]}
for ip in helpers_data.split(','):
addr[vlan].append(ip)
print(tabulate({'Interface':[vlan], vlan:addr.get(vlan)}, tablefmt='simple', stralign='right') + '\n')

def register(cli):
cli.commands['dhcp_relay_helper'].add_command(dhcp_relay_helper)

0 comments on commit 453d419

Please sign in to comment.