Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[sub intf] Fix kernel side processing to enslave sub interface to non-default vrf #1521

Merged
merged 102 commits into from
May 24, 2021

Conversation

wendani
Copy link
Contributor

@wendani wendani commented Nov 29, 2020

What I did
Change in IntfMgr:

  1. Use alias (instead of subIntfAlias before the change) to hold complete sub interface name; use parentAlias (instead of alias before the change) to hold parent port name.
  2. Move sub interface creation to the first place before processing fields vrf, proxy arp, and garp.

In doing above, a sub interface can receive the same treatment as other types of interfaces (interface type port, type vlan) on vrf, proxy arp, and garp fields, while maintaining an indicator (parentAlias not empty) to receive treatment specific to a sub interface (creation, deletion).

Why I did it
Fix #1277, Fix #1510

How I verified it
vs test. Extended all test cases to test a sub interface ingress linked to a non-default vrf.

Before the change the following extended test cases fail:

  1. test_sub_port_intf_creation
========================================================================== FAILURES ==========================================================================
________________________________________________________ TestSubPortIntf.test_sub_port_intf_creation _________________________________________________________

self = <test_sub_port_intf.TestSubPortIntf object at 0x7fb8e66d92e8>, dvs = <conftest.DockerVirtualSwitch object at 0x7fb8ea94f5f8>

    def test_sub_port_intf_creation(self, dvs):
        self.connect_dbs(dvs)
    
        self._test_sub_port_intf_creation(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST)
        self._test_sub_port_intf_creation(dvs, self.LAG_SUB_PORT_INTERFACE_UNDER_TEST)
    
>       self._test_sub_port_intf_creation(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST, self.VRF_UNDER_TEST)

test_sub_port_intf.py:311: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_sub_port_intf.py:267: in _test_sub_port_intf_creation
    self.check_sub_port_intf_vrf_bind_kernel(dvs, sub_port_intf_name, vrf_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <test_sub_port_intf.TestSubPortIntf object at 0x7fb8e66d92e8>, dvs = <conftest.DockerVirtualSwitch object at 0x7fb8ea94f5f8>
port_name = 'Ethernet64.10', vrf_name = 'Vrf0'

    def check_sub_port_intf_vrf_bind_kernel(self, dvs, port_name, vrf_name):
        (ec, out) = dvs.runcmd(['bash', '-c', "ip link show {} | grep {}".format(port_name, vrf_name)])
>       assert ec == 0
E       assert 1 == 0
E         +1
E         -0

test_sub_port_intf.py:207: AssertionError
================================================================== short test summary info ===================================================================
FAILED test_sub_port_intf.py::TestSubPortIntf::test_sub_port_intf_creation - assert 1 == 0
================================================================ 1 failed in 60.83s (0:01:00) ================================================================
  1. test_sub_port_intf_add_ip_addrs
========================================================================== FAILURES ==========================================================================
______________________________________________________ TestSubPortIntf.test_sub_port_intf_add_ip_addrs _______________________________________________________

self = <test_sub_port_intf.TestSubPortIntf object at 0x7f91ee6166a0>, dvs = <conftest.DockerVirtualSwitch object at 0x7f91ee633518>

    def test_sub_port_intf_add_ip_addrs(self, dvs):
        self.connect_dbs(dvs)
    
        self._test_sub_port_intf_add_ip_addrs(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST)
        self._test_sub_port_intf_add_ip_addrs(dvs, self.LAG_SUB_PORT_INTERFACE_UNDER_TEST)
    
>       self._test_sub_port_intf_add_ip_addrs(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST, self.VRF_UNDER_TEST)

test_sub_port_intf.py:380: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_sub_port_intf.py:356: in _test_sub_port_intf_add_ip_addrs
    self.check_sub_port_intf_route_entries(vrf_oid)
test_sub_port_intf.py:203: in check_sub_port_intf_route_entries
    wait_for_result(_access_function, DVSDatabase.DEFAULT_POLLING_CONFIG)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

polling_function = <function TestSubPortIntf.check_sub_port_intf_route_entries.<locals>._access_function at 0x7f91ee688730>
polling_config = PollingConfig(polling_interval=0.01, timeout=5, strict=True)

    def wait_for_result(
        polling_function: Callable[[], Tuple[bool, Any]],
        polling_config: PollingConfig,
    ) -> Tuple[bool, Any]:
        """Run `polling_function` periodically using the specified `polling_config`.
    
        Args:
            polling_function: The function being polled. The function cannot take any arguments and
                must return a status which indicates if the function was succesful or not, as well as
                some return value.
            polling_config: The parameters to use to poll the polling function.
    
        Returns:
            If the polling function succeeds, then this method will return True and the output of the
            polling function.
    
            If it does not succeed within the provided timeout, it will return False and whatever the
            output of the polling function was on the final attempt.
        """
        if polling_config.polling_interval == 0:
            iterations = 1
        else:
            iterations = int(polling_config.timeout // polling_config.polling_interval) + 1
    
        for _ in range(iterations):
            status, result = polling_function()
    
            if status:
                return (True, result)
    
            time.sleep(polling_config.polling_interval)
    
        if polling_config.strict:
>           assert False, f"Operation timed out after {polling_config.timeout} seconds"
E           AssertionError: Operation timed out after 5 seconds

dvslib/dvs_common.py:54: AssertionError
================================================================== short test summary info ===================================================================
FAILED test_sub_port_intf.py::TestSubPortIntf::test_sub_port_intf_add_ip_addrs - AssertionError: Operation timed out after 5 seconds
================================================================ 1 failed in 69.03s (0:01:09) ================================================================
  1. test_sub_port_intf_removal
========================================================================== FAILURES ==========================================================================
_________________________________________________________ TestSubPortIntf.test_sub_port_intf_removal _________________________________________________________

self = <test_sub_port_intf.TestSubPortIntf object at 0x7fe9cc3aa438>, dvs = <conftest.DockerVirtualSwitch object at 0x7fe9cc3aa518>

    def test_sub_port_intf_removal(self, dvs):
        self.connect_dbs(dvs)
    
        self._test_sub_port_intf_removal(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST)
        self._test_sub_port_intf_removal(dvs, self.LAG_SUB_PORT_INTERFACE_UNDER_TEST)
    
>       self._test_sub_port_intf_removal(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST, self.VRF_UNDER_TEST)

test_sub_port_intf.py:635: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_sub_port_intf.py:580: in _test_sub_port_intf_removal
    self.check_sub_port_intf_vrf_bind_kernel(dvs, sub_port_intf_name, vrf_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <test_sub_port_intf.TestSubPortIntf object at 0x7fe9cc3aa438>, dvs = <conftest.DockerVirtualSwitch object at 0x7fe9cc3aa518>
port_name = 'Ethernet64.10', vrf_name = 'Vrf0'

    def check_sub_port_intf_vrf_bind_kernel(self, dvs, port_name, vrf_name):
        (ec, out) = dvs.runcmd(['bash', '-c', "ip link show {} | grep {}".format(port_name, vrf_name)])
>       assert ec == 0
E       assert 1 == 0
E         +1
E         -0

test_sub_port_intf.py:207: AssertionError
================================================================== short test summary info ===================================================================
FAILED test_sub_port_intf.py::TestSubPortIntf::test_sub_port_intf_removal - assert 1 == 0
================================================================ 1 failed in 61.08s (0:01:01) ================================================================
  1. removal sequence test, piggy-backed onto test_sub_port_intf_removal

Validate that sub interface removal does not take effect until all IP addresses configured on it are removed.

Before the change, removal sequence test fails:

=========================================================================== FAILURES ============================================================================
__________________________________________________________ TestSubPortIntf.test_sub_port_intf_removal ___________________________________________________________

self = <test_sub_port_intf.TestSubPortIntf object at 0x7fbb75b9fb38>, dvs = <conftest.DockerVirtualSwitch object at 0x7fbb75b9f7b8>

    def test_sub_port_intf_removal(self, dvs):
        self.connect_dbs(dvs)
    
        #self._test_sub_port_intf_removal(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST)
        #self._test_sub_port_intf_removal(dvs, self.LAG_SUB_PORT_INTERFACE_UNDER_TEST)
    
        #self._test_sub_port_intf_removal(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST, vrf_name=self.VRF_UNDER_TEST)
        #self._test_sub_port_intf_removal(dvs, self.LAG_SUB_PORT_INTERFACE_UNDER_TEST, vrf_name=self.VRF_UNDER_TEST)
    
        #self._test_sub_port_intf_removal(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST, vrf_name=self.VNET_UNDER_TEST)
        #self._test_sub_port_intf_removal(dvs, self.LAG_SUB_PORT_INTERFACE_UNDER_TEST, vrf_name=self.VNET_UNDER_TEST)
    
>       self._test_sub_port_intf_removal(dvs, self.SUB_PORT_INTERFACE_UNDER_TEST, removal_seq_test=True)

test_sub_port_intf.py:950: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_sub_port_intf.py:851: in _test_sub_port_intf_removal
    self.check_sub_port_intf_fvs(self.state_db, state_tbl_name, sub_port_intf_name, fv_dict)
test_sub_port_intf.py:290: in check_sub_port_intf_fvs
    db.wait_for_field_match(table_name, key, fv_dict)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <dvslib.dvs_database.DVSDatabase object at 0x7fbb75bea8d0>, table_name = 'PORT_TABLE', key = 'Ethernet64.10', expected_fields = {'state': 'ok'}
polling_config = PollingConfig(polling_interval=0.01, timeout=5.0, strict=True), failure_message = None

    def wait_for_field_match(
        self,
        table_name: str,
        key: str,
        expected_fields: Dict[str, str],
        polling_config: PollingConfig = PollingConfig(),
        failure_message: str = None,
    ) -> Dict[str, str]:
        """Wait for the entry stored at `key` to have the specified field/values and retrieve it.
    
        This method is useful if you only care about the contents of a subset of the fields stored
        in the specified entry.
    
        Args:
            table_name: The name of the table where the entry is stored.
            key: The key that maps to the entry being checked.
            expected_fields: The fields and their values we expect to see in the entry.
            polling_config: The parameters to use to poll the db.
            failure_message: The message to print if the call times out. This will only take effect
                if the PollingConfig is set to strict.
    
        Returns:
            The entry stored at `key`. If no entry is found, then an empty Dict is returned.
        """
    
        def access_function():
            fv_pairs = self.get_entry(table_name, key)
            return (
                all(fv_pairs.get(k) == v for k, v in expected_fields.items()),
                fv_pairs,
            )
    
        status, result = wait_for_result(
            access_function, self._disable_strict_polling(polling_config)
        )
    
        if not status:
            message = failure_message or (
                f"Expected field/value pairs not found: expected={expected_fields}, "
                f'received={result}, key="{key}", table="{table_name}"'
            )
>           assert not polling_config.strict, message
E           AssertionError: Expected field/value pairs not found: expected={'state': 'ok'}, received={}, key="Ethernet64.10", table="PORT_TABLE"

dvslib/dvs_database.py:203: AssertionError
==================================================================== short test summary info ====================================================================
FAILED test_sub_port_intf.py::TestSubPortIntf::test_sub_port_intf_removal - AssertionError: Expected field/value pairs not found: expected={'state': 'ok'}, re...
================================================================= 1 failed in 69.54s (0:01:09) ==================================================================

Details if related

Dependancy

wendani and others added 30 commits September 29, 2020 19:40
Signed-off-by: Wenda Ni <[email protected]>
Signed-off-by: Wenda Ni <[email protected]>
Signed-off-by: Wenda Ni <[email protected]>
Signed-off-by: wenda.ni <[email protected]>
Signed-off-by: wenda.ni <[email protected]>
@lguohan
Copy link
Contributor

lguohan commented Apr 24, 2021

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@neethajohn neethajohn merged commit 278770d into sonic-net:master May 24, 2021
@neethajohn
Copy link
Contributor

Discussed with Prince offline on taking it to 202012 branch

qiluo-msft pushed a commit that referenced this pull request May 25, 2021
…-default vrf (#1521)

Signed-off-by: Wenda Ni <[email protected]>

What I did
Change in IntfMgr:

Use alias (instead of subIntfAlias before the change) to hold complete sub interface name; use parentAlias (instead of alias before the change) to hold parent port name.
Move sub interface creation to the first place before processing fields vrf, proxy arp, and garp.
In doing above, a sub interface can receive the same treatment as other types of interfaces (interface type port, type vlan) on vrf, proxy arp, and garp fields, while maintaining an indicator (parentAlias not empty) to receive treatment specific to a sub interface (creation, deletion).

Why I did it
Fix #1277, #1510

How I verified it
vs test. Extended all test cases to test a sub interface ingress linked to a non-default vrf.
xumia pushed a commit to xumia/sonic-swss that referenced this pull request Jun 2, 2021
Observe persistent failure of newly added vs test on testing code change in intfmgrd after migrating to azure pipeline. sonic-net#1521 passed in legacy Jenkins pipeline.

What we found is that the code change in the swss compiled with PR change is not properly installed in vs docker for a direct installation using dpkg -i. This is confirmed by verifying pipeline artifacts that md5sum value of /user/bin/intfmgrd changes if we install swss deb aritfact into the docker vs artifact, while that of /usr/bin/orchangent stays unchanged.

md5sum before swss install in vs docker

# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent
 
# md5sum /usr/bin/intfmgrd  
fa2b06e20be683286adb47c55635a86d  /usr/bin/intfmgrd
md5sum after swss install

# dpkg -i swss_1.0.0_amd64.deb 
(Reading database ... 19180 files and directories currently installed.)
Preparing to unpack swss_1.0.0_amd64.deb ...
Unpacking swss (1.0.0) over (1.0.0) ...
Setting up swss (1.0.0) ...
# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent

# md5sum /usr/bin/intfmgrd 
e959340709e7aedd7489e69dfd19768f  /usr/bin/intfmgrd

Signed-off-by: Wenda Ni <[email protected]>
xumia added a commit that referenced this pull request Jun 18, 2021
* [ci]: use build template (#1633)

Signed-off-by: Guohan Lu <[email protected]>

* [ci]: run vstest

Signed-off-by: Guohan Lu <[email protected]>

* [ci]: archive swss pytests (#1690)

in other pipelines, they will download swss and pytests. this is make sure the swss.deb and pytests are matched.

Signed-off-by: Guohan Lu <[email protected]>

* [ci]: Purge swss before install (#1654)

Observe persistent failure of newly added vs test on testing code change in intfmgrd after migrating to azure pipeline. #1521 passed in legacy Jenkins pipeline.

What we found is that the code change in the swss compiled with PR change is not properly installed in vs docker for a direct installation using dpkg -i. This is confirmed by verifying pipeline artifacts that md5sum value of /user/bin/intfmgrd changes if we install swss deb aritfact into the docker vs artifact, while that of /usr/bin/orchangent stays unchanged.

md5sum before swss install in vs docker

# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent
 
# md5sum /usr/bin/intfmgrd  
fa2b06e20be683286adb47c55635a86d  /usr/bin/intfmgrd
md5sum after swss install

# dpkg -i swss_1.0.0_amd64.deb 
(Reading database ... 19180 files and directories currently installed.)
Preparing to unpack swss_1.0.0_amd64.deb ...
Unpacking swss (1.0.0) over (1.0.0) ...
Setting up swss (1.0.0) ...
# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent

# md5sum /usr/bin/intfmgrd 
e959340709e7aedd7489e69dfd19768f  /usr/bin/intfmgrd

Signed-off-by: Wenda Ni <[email protected]>

* Fix branch reference error

* Fix branch reference error

Co-authored-by: lguohan <[email protected]>
Co-authored-by: Wenda Ni <[email protected]>
xumia pushed a commit to xumia/sonic-swss that referenced this pull request Jun 25, 2021
Observe persistent failure of newly added vs test on testing code change in intfmgrd after migrating to azure pipeline. sonic-net#1521 passed in legacy Jenkins pipeline.

What we found is that the code change in the swss compiled with PR change is not properly installed in vs docker for a direct installation using dpkg -i. This is confirmed by verifying pipeline artifacts that md5sum value of /user/bin/intfmgrd changes if we install swss deb aritfact into the docker vs artifact, while that of /usr/bin/orchangent stays unchanged.

md5sum before swss install in vs docker

# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent
 
# md5sum /usr/bin/intfmgrd  
fa2b06e20be683286adb47c55635a86d  /usr/bin/intfmgrd
md5sum after swss install

# dpkg -i swss_1.0.0_amd64.deb 
(Reading database ... 19180 files and directories currently installed.)
Preparing to unpack swss_1.0.0_amd64.deb ...
Unpacking swss (1.0.0) over (1.0.0) ...
Setting up swss (1.0.0) ...
# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent

# md5sum /usr/bin/intfmgrd 
e959340709e7aedd7489e69dfd19768f  /usr/bin/intfmgrd

Signed-off-by: Wenda Ni <[email protected]>
raphaelt-nvidia pushed a commit to raphaelt-nvidia/sonic-swss that referenced this pull request Oct 5, 2021
Observe persistent failure of newly added vs test on testing code change in intfmgrd after migrating to azure pipeline. sonic-net#1521 passed in legacy Jenkins pipeline.

What we found is that the code change in the swss compiled with PR change is not properly installed in vs docker for a direct installation using dpkg -i. This is confirmed by verifying pipeline artifacts that md5sum value of /user/bin/intfmgrd changes if we install swss deb aritfact into the docker vs artifact, while that of /usr/bin/orchangent stays unchanged.

md5sum before swss install in vs docker

# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent
 
# md5sum /usr/bin/intfmgrd  
fa2b06e20be683286adb47c55635a86d  /usr/bin/intfmgrd
md5sum after swss install

# dpkg -i swss_1.0.0_amd64.deb 
(Reading database ... 19180 files and directories currently installed.)
Preparing to unpack swss_1.0.0_amd64.deb ...
Unpacking swss (1.0.0) over (1.0.0) ...
Setting up swss (1.0.0) ...
# md5sum /usr/bin/orchagent
28307a7805ea6f3bc5057c0257bf46e6  /usr/bin/orchagent

# md5sum /usr/bin/intfmgrd 
e959340709e7aedd7489e69dfd19768f  /usr/bin/intfmgrd

Signed-off-by: Wenda Ni <[email protected]>
raphaelt-nvidia pushed a commit to raphaelt-nvidia/sonic-swss that referenced this pull request Oct 5, 2021
…-default vrf (sonic-net#1521)

Signed-off-by: Wenda Ni <[email protected]>

What I did
Change in IntfMgr:

Use alias (instead of subIntfAlias before the change) to hold complete sub interface name; use parentAlias (instead of alias before the change) to hold parent port name.
Move sub interface creation to the first place before processing fields vrf, proxy arp, and garp.
In doing above, a sub interface can receive the same treatment as other types of interfaces (interface type port, type vlan) on vrf, proxy arp, and garp fields, while maintaining an indicator (parentAlias not empty) to receive treatment specific to a sub interface (creation, deletion).

Why I did it
Fix sonic-net#1277, sonic-net#1510

How I verified it
vs test. Extended all test cases to test a sub interface ingress linked to a non-default vrf.
shi-su pushed a commit that referenced this pull request Nov 23, 2021
…net (#1642)

What I did
Extended the following vs tests to validate the use case of sub interface ingress linked to a vnet:

sub port interface creation
sub port interface add ipv4 addresses
sub port interface admin status change
sub port interface remove ipv4 addresses
sub port interface removal

Why I did it
Add vs test to validate that #1521 fixes sonic-net/sonic-buildimage#4238
EdenGri pushed a commit to EdenGri/sonic-swss that referenced this pull request Feb 28, 2022
What I did
Radius Management User Authentication Feature

How I did it
HLD: https://github.com/Azure/SONiC/blob/master/doc/aaa/radius_authentication.md

How to verify it
This is the CLI only. The changes are reflected in the Redis Config DB.

Previous command output (if the output of a command-line utility has changed)
New command output (if the output of a command-line utility has changed)
admin@sonic:~$ show radius
RADIUS global auth_type pap (default)
RADIUS global retransmit 3 (default)
RADIUS global timeout 5 (default)
RADIUS global passkey <EMPTY_STRING> (default)

admin@sonic:~$

admin@sonic:~$ sudo config radius
Usage: config radius [OPTIONS] COMMAND [ARGS]...

RADIUS server configuration

Options:
-?, -h, --help Show this message and exit.

Commands:
add Specify a RADIUS server
authtype Specify RADIUS server global auth_type [chap | pap | mschapv2]
default set its default configuration
delete Delete a RADIUS server
nasip Specify RADIUS server global NAS-IP|IPV6-Address
passkey Specify RADIUS server global passkey
retransmit Specify RADIUS server global retry attempts <0 - 10>
sourceip Specify RADIUS server global source ip
statistics Specify RADIUS server global statistics [enable | disable |...
timeout Specify RADIUS server global timeout <1 - 60>
admin@sonic:~$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
6 participants