[202305] Revert DHCPv4 and DHCPv6 counter (#18253)
Why I did it Reverting DHCP counter changes due to unexpected packet drops seen in recv buffer, causing counter counts to be inaccurate in dhcpmon and affecting dhcp6relay performance Work item tracking Microsoft ADO (number only): 26918588 How I did it Reset submodule head and revert related dockerfile changes How to verify it Ran mgmt test and stress test
This commit is contained in:
parent
ac82e2f824
commit
8d3d393522
@ -13,8 +13,6 @@ ENV IMAGE_VERSION=$image_version
|
|||||||
# Update apt's cache of available packages
|
# Update apt's cache of available packages
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
|
||||||
RUN apt-get install -y libjsoncpp-dev
|
|
||||||
|
|
||||||
{% if docker_dhcp_relay_debs.strip() -%}
|
{% if docker_dhcp_relay_debs.strip() -%}
|
||||||
# Copy built Debian packages
|
# Copy built Debian packages
|
||||||
{{ copy_files("debs/", docker_dhcp_relay_debs.split(' '), "/debs/") }}
|
{{ copy_files("debs/", docker_dhcp_relay_debs.split(' '), "/debs/") }}
|
||||||
|
@ -17,21 +17,24 @@ try:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
expected_counts_v6 = """\
|
expected_counts = """\
|
||||||
Message Type Vlan1000(RX)
|
Message Type Vlan1000
|
||||||
-------------- ---------------
|
------------------- -----------
|
||||||
|
Unknown
|
||||||
Message Type Vlan1000(TX)
|
Solicit
|
||||||
-------------- ---------------
|
Advertise
|
||||||
|
Request
|
||||||
"""
|
Confirm
|
||||||
|
Renew
|
||||||
expected_counts_v4 = """\
|
Rebind
|
||||||
Message Type Vlan1000(RX)
|
Reply
|
||||||
-------------- ---------------
|
Release
|
||||||
|
Decline
|
||||||
Message Type Vlan1000(TX)
|
Reconfigure
|
||||||
-------------- ---------------
|
Information-Request
|
||||||
|
Relay-Forward
|
||||||
|
Relay-Reply
|
||||||
|
Malformed
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -40,14 +43,5 @@ class TestDhcp6RelayCounters(object):
|
|||||||
def test_show_counts(self):
|
def test_show_counts(self):
|
||||||
runner = CliRunner()
|
runner = CliRunner()
|
||||||
result = runner.invoke(show.dhcp6relay_counters.commands["counts"], ["-i Vlan1000"])
|
result = runner.invoke(show.dhcp6relay_counters.commands["counts"], ["-i Vlan1000"])
|
||||||
print(result.output)
|
assert result.output == expected_counts
|
||||||
assert result.output == expected_counts_v6
|
|
||||||
|
|
||||||
class TestDhcpRelayCounters(object):
|
|
||||||
|
|
||||||
def test_show_counts(self):
|
|
||||||
runner = CliRunner()
|
|
||||||
result = runner.invoke(show.dhcp4relay_counters.commands["counts"], ["-i Vlan1000"])
|
|
||||||
print(result.output)
|
|
||||||
assert result.output == expected_counts_v4
|
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import click
|
import click
|
||||||
import ast
|
|
||||||
from natsort import natsorted
|
from natsort import natsorted
|
||||||
from tabulate import tabulate
|
from tabulate import tabulate
|
||||||
import show.vlan as show_vlan
|
import show.vlan as show_vlan
|
||||||
@ -8,20 +7,13 @@ import utilities_common.cli as clicommon
|
|||||||
from swsscommon.swsscommon import ConfigDBConnector
|
from swsscommon.swsscommon import ConfigDBConnector
|
||||||
from swsscommon.swsscommon import SonicV2Connector
|
from swsscommon.swsscommon import SonicV2Connector
|
||||||
|
|
||||||
|
|
||||||
# STATE_DB Table
|
# STATE_DB Table
|
||||||
DHCPv4_COUNTER_TABLE = 'DHCP_COUNTER_TABLE'
|
|
||||||
DHCPv6_COUNTER_TABLE = 'DHCPv6_COUNTER_TABLE'
|
DHCPv6_COUNTER_TABLE = 'DHCPv6_COUNTER_TABLE'
|
||||||
|
|
||||||
# DHCPv4 Counter Messages
|
|
||||||
dhcpv4_messages = [
|
|
||||||
"Unknown", "Discover", "Offer", "Request", "Decline", "Ack", "Nack", "Release", "Inform"
|
|
||||||
]
|
|
||||||
|
|
||||||
# DHCPv6 Counter Messages
|
# DHCPv6 Counter Messages
|
||||||
dhcpv6_messages = [
|
messages = ["Unknown", "Solicit", "Advertise", "Request", "Confirm", "Renew", "Rebind", "Reply", "Release", "Decline",
|
||||||
"Unknown", "Solicit", "Advertise", "Request", "Confirm", "Renew", "Rebind", "Reply", "Release",
|
"Reconfigure", "Information-Request", "Relay-Forward", "Relay-Reply", "Malformed"]
|
||||||
"Decline", "Reconfigure", "Information-Request", "Relay-Forward", "Relay-Reply", "Malformed"
|
|
||||||
]
|
|
||||||
|
|
||||||
# DHCP_RELAY Config Table
|
# DHCP_RELAY Config Table
|
||||||
DHCP_RELAY = 'DHCP_RELAY'
|
DHCP_RELAY = 'DHCP_RELAY'
|
||||||
@ -45,75 +37,6 @@ def get_dhcp_helper_address(ctx, vlan):
|
|||||||
|
|
||||||
show_vlan.VlanBrief.register_column('DHCP Helper Address', get_dhcp_helper_address)
|
show_vlan.VlanBrief.register_column('DHCP Helper Address', get_dhcp_helper_address)
|
||||||
|
|
||||||
class DHCPv4_Counter(object):
|
|
||||||
def __init__(self):
|
|
||||||
self.db = SonicV2Connector(use_unix_socket_path=False)
|
|
||||||
self.db.connect(self.db.STATE_DB)
|
|
||||||
self.table_name = DHCPv4_COUNTER_TABLE + self.db.get_db_separator(self.db.STATE_DB)
|
|
||||||
|
|
||||||
def get_interface(self):
|
|
||||||
""" Get all names of all interfaces in DHCPv4_COUNTER_TABLE """
|
|
||||||
interfaces = []
|
|
||||||
for key in self.db.keys(self.db.STATE_DB):
|
|
||||||
if DHCPv4_COUNTER_TABLE in key:
|
|
||||||
interfaces.append(key[21:])
|
|
||||||
return interfaces
|
|
||||||
|
|
||||||
def get_dhcp4relay_msg_count(self, interface, dir):
|
|
||||||
""" Get count of a dhcprelay message """
|
|
||||||
value = self.db.get(self.db.STATE_DB, self.table_name + str(interface), str(dir))
|
|
||||||
cnts = ast.literal_eval(str(value))
|
|
||||||
data = []
|
|
||||||
if cnts is not None:
|
|
||||||
for k, v in cnts.items():
|
|
||||||
data.append([k, v])
|
|
||||||
return data
|
|
||||||
|
|
||||||
def clear_table(self, interface):
|
|
||||||
""" Reset all message counts to 0 """
|
|
||||||
v4_cnts = {}
|
|
||||||
for msg in dhcpv4_messages:
|
|
||||||
v4_cnts[msg] = '0'
|
|
||||||
self.db.set(self.db.STATE_DB, self.table_name + str(interface), str("RX"), str(v4_cnts))
|
|
||||||
self.db.set(self.db.STATE_DB, self.table_name + str(interface), str("TX"), str(v4_cnts))
|
|
||||||
|
|
||||||
def print_dhcpv4_count(counter, intf):
|
|
||||||
"""Print count of each message"""
|
|
||||||
rx_data = counter.get_dhcp4relay_msg_count(intf, "RX")
|
|
||||||
print(tabulate(rx_data, headers=["Message Type", intf+"(RX)"], tablefmt='simple', stralign='right') + "\n")
|
|
||||||
tx_data = counter.get_dhcp4relay_msg_count(intf, "TX")
|
|
||||||
print(tabulate(tx_data, headers=["Message Type", intf+"(TX)"], tablefmt='simple', stralign='right') + "\n")
|
|
||||||
|
|
||||||
#
|
|
||||||
# 'dhcp4relay_counters' group ###
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
@click.group(cls=clicommon.AliasedGroup, name="dhcp4relay_counters")
|
|
||||||
def dhcp4relay_counters():
|
|
||||||
"""Show DHCPv4 counter"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def ipv4_counters(interface):
|
|
||||||
counter = DHCPv4_Counter()
|
|
||||||
counter_intf = counter.get_interface()
|
|
||||||
|
|
||||||
if interface:
|
|
||||||
print_dhcpv4_count(counter, interface)
|
|
||||||
else:
|
|
||||||
for intf in counter_intf:
|
|
||||||
print_dhcpv4_count(counter, intf)
|
|
||||||
|
|
||||||
|
|
||||||
# 'counts' subcommand ("show dhcp4relay_counters counts")
|
|
||||||
@dhcp4relay_counters.command('counts')
|
|
||||||
@click.option('-i', '--interface', required=False)
|
|
||||||
@click.option('--verbose', is_flag=True, help="Enable verbose output")
|
|
||||||
def counts(interface, verbose):
|
|
||||||
"""Show dhcp4relay message counts"""
|
|
||||||
ipv4_counters(interface)
|
|
||||||
|
|
||||||
|
|
||||||
class DHCPv6_Counter(object):
|
class DHCPv6_Counter(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -123,37 +46,30 @@ class DHCPv6_Counter(object):
|
|||||||
|
|
||||||
def get_interface(self):
|
def get_interface(self):
|
||||||
""" Get all names of all interfaces in DHCPv6_COUNTER_TABLE """
|
""" Get all names of all interfaces in DHCPv6_COUNTER_TABLE """
|
||||||
interfaces = []
|
vlans = []
|
||||||
for key in self.db.keys(self.db.STATE_DB):
|
for key in self.db.keys(self.db.STATE_DB):
|
||||||
if DHCPv6_COUNTER_TABLE in key:
|
if DHCPv6_COUNTER_TABLE in key:
|
||||||
interfaces.append(key[21:])
|
vlans.append(key[21:])
|
||||||
return interfaces
|
return vlans
|
||||||
|
|
||||||
def get_dhcp6relay_msg_count(self, interface, dir):
|
def get_dhcp6relay_msg_count(self, interface, msg):
|
||||||
""" Get count of a dhcp6relay message """
|
""" Get count of a dhcp6relay message """
|
||||||
value = self.db.get(self.db.STATE_DB, self.table_name + str(interface), str(dir))
|
count = self.db.get(self.db.STATE_DB, self.table_name + str(interface), str(msg))
|
||||||
cnts = ast.literal_eval(str(value))
|
data = [str(msg), count]
|
||||||
data = []
|
|
||||||
if cnts is not None:
|
|
||||||
for k, v in cnts.items():
|
|
||||||
data.append([k, v])
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def clear_table(self, interface):
|
def clear_table(self, interface):
|
||||||
""" Reset all message counts to 0 """
|
""" Reset all message counts to 0 """
|
||||||
v6_cnts = {}
|
for msg in messages:
|
||||||
for msg in dhcpv6_messages:
|
self.db.set(self.db.STATE_DB, self.table_name + str(interface), str(msg), '0')
|
||||||
v6_cnts[msg] = '0'
|
|
||||||
self.db.set(self.db.STATE_DB, self.table_name + str(interface), str("RX"), str(v6_cnts))
|
|
||||||
self.db.set(self.db.STATE_DB, self.table_name + str(interface), str("TX"), str(v6_cnts))
|
|
||||||
|
|
||||||
|
|
||||||
def print_dhcpv6_count(counter, intf):
|
def print_count(counter, intf):
|
||||||
"""Print count of each message"""
|
"""Print count of each message"""
|
||||||
rx_data = counter.get_dhcp6relay_msg_count(intf, "RX")
|
data = []
|
||||||
print(tabulate(rx_data, headers=["Message Type", intf+"(RX)"], tablefmt='simple', stralign='right') + "\n")
|
for i in messages:
|
||||||
tx_data = counter.get_dhcp6relay_msg_count(intf, "TX")
|
data.append(counter.get_dhcp6relay_msg_count(intf, i))
|
||||||
print(tabulate(tx_data, headers=["Message Type", intf+"(TX)"], tablefmt='simple', stralign='right') + "\n")
|
print(tabulate(data, headers=["Message Type", intf], tablefmt='simple', stralign='right') + "\n")
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -172,10 +88,10 @@ def ipv6_counters(interface):
|
|||||||
counter_intf = counter.get_interface()
|
counter_intf = counter.get_interface()
|
||||||
|
|
||||||
if interface:
|
if interface:
|
||||||
print_dhcpv6_count(counter, interface)
|
print_count(counter, interface)
|
||||||
else:
|
else:
|
||||||
for intf in counter_intf:
|
for intf in counter_intf:
|
||||||
print_dhcpv6_count(counter, intf)
|
print_count(counter, intf)
|
||||||
|
|
||||||
|
|
||||||
# 'counts' subcommand ("show dhcp6relay_counters counts")
|
# 'counts' subcommand ("show dhcp6relay_counters counts")
|
||||||
@ -184,6 +100,7 @@ def ipv6_counters(interface):
|
|||||||
@click.option('--verbose', is_flag=True, help="Enable verbose output")
|
@click.option('--verbose', is_flag=True, help="Enable verbose output")
|
||||||
def counts(interface, verbose):
|
def counts(interface, verbose):
|
||||||
"""Show dhcp6relay message counts"""
|
"""Show dhcp6relay message counts"""
|
||||||
|
|
||||||
ipv6_counters(interface)
|
ipv6_counters(interface)
|
||||||
|
|
||||||
|
|
||||||
@ -282,7 +199,6 @@ def dhcp_relay_ip6counters(interface):
|
|||||||
|
|
||||||
|
|
||||||
def register(cli):
|
def register(cli):
|
||||||
cli.add_command(dhcp4relay_counters)
|
|
||||||
cli.add_command(dhcp6relay_counters)
|
cli.add_command(dhcp6relay_counters)
|
||||||
cli.add_command(dhcp_relay_helper)
|
cli.add_command(dhcp_relay_helper)
|
||||||
cli.add_command(dhcp_relay)
|
cli.add_command(dhcp_relay)
|
||||||
|
@ -359,7 +359,6 @@ RUN apt-get update && apt-get install -y \
|
|||||||
# For DHCP Monitor tool
|
# For DHCP Monitor tool
|
||||||
libexplain-dev \
|
libexplain-dev \
|
||||||
libevent-dev \
|
libevent-dev \
|
||||||
libjsoncpp-dev \
|
|
||||||
# For libyang
|
# For libyang
|
||||||
swig \
|
swig \
|
||||||
# For build dtb
|
# For build dtb
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit fc20a97ba2eba753974ea95d504d130093030596
|
Subproject commit 22a7467a8ab3e26c3d20e959a0702380f0d4b5ae
|
@ -1 +1 @@
|
|||||||
Subproject commit 5ae186f4a6c25647f5ce7b4d2c884b08423455e7
|
Subproject commit 84e4419eef4f9b1fafa86ebb7937fe4904aa0795
|
Loading…
Reference in New Issue
Block a user