lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210129234304.heqjkkngqri5hjoc@skbuf>
Date:   Sat, 30 Jan 2021 01:43:04 +0200
From:   Vladimir Oltean <olteanv@...il.com>
To:     "David S . Miller" <davem@...emloft.net>,
        Jakub Kicinski <kuba@...nel.org>, netdev@...r.kernel.org
Cc:     Andrew Lunn <andrew@...n.ch>,
        Florian Fainelli <f.fainelli@...il.com>,
        Vivien Didelot <vivien.didelot@...il.com>,
        Claudiu Manoil <claudiu.manoil@....com>,
        Alexandre Belloni <alexandre.belloni@...tlin.com>,
        Vladimir Oltean <vladimir.oltean@....com>,
        UNGLinuxDriver@...rochip.com
Subject: Re: [PATCH v8 net-next 08/11] net: dsa: allow changing the tag
 protocol via the "tagging" device attribute

On Fri, Jan 29, 2021 at 03:00:06AM +0200, Vladimir Oltean wrote:
> From: Vladimir Oltean <vladimir.oltean@....com>
> 
> Currently DSA exposes the following sysfs:
> $ cat /sys/class/net/eno2/dsa/tagging
> ocelot
> 
> which is a read-only device attribute, introduced in the kernel as
> commit 98cdb4807123 ("net: dsa: Expose tagging protocol to user-space"),
> and used by libpcap since its commit 993db3800d7d ("Add support for DSA
> link-layer types").
> 
> It would be nice if we could extend this device attribute by making it
> writable:
> $ echo ocelot-8021q > /sys/class/net/eno2/dsa/tagging
> 
> This is useful with DSA switches that can make use of more than one
> tagging protocol. It may be useful in dsa_loop in the future too, to
> perform offline testing of various taggers, or for changing between dsa
> and edsa on Marvell switches, if that is desirable.
> 
> In terms of implementation, drivers can support this feature by
> implementing .change_tag_protocol, which should always leave the switch
> in a consistent state: either with the new protocol if things went well,
> or with the old one if something failed. Teardown of the old protocol,
> if necessary, must be handled by the driver.
> 
> Some things remain as before:
> - The .get_tag_protocol is currently only called at probe time, to load
>   the initial tagging protocol driver. Nonetheless, new drivers should
>   report the tagging protocol in current use now.
> - The driver should manage by itself the initial setup of tagging
>   protocol, no later than the .setup() method, as well as destroying
>   resources used by the last tagger in use, no earlier than the
>   .teardown() method.
> 
> For multi-switch DSA trees, error handling is a bit more complicated,
> since e.g. the 5th out of 7 switches may fail to change the tag
> protocol. When that happens, a revert to the original tag protocol is
> attempted, but that may fail too, leaving the tree in an inconsistent
> state despite each individual switch implementing .change_tag_protocol
> transactionally. Since the intersection between drivers that implement
> .change_tag_protocol and drivers that support D in DSA is currently the
> empty set, the possibility for this error to happen is ignored for now.
> 
> Testing:
> 
> $ insmod mscc_felix.ko
> [   79.549784] mscc_felix 0000:00:00.5: Adding to iommu group 14
> [   79.565712] mscc_felix 0000:00:00.5: Failed to register DSA switch: -517
> $ insmod tag_ocelot.ko
> $ rmmod mscc_felix.ko
> $ insmod mscc_felix.ko
> [   97.261724] libphy: VSC9959 internal MDIO bus: probed
> [   97.267363] mscc_felix 0000:00:00.5: Found PCS at internal MDIO address 0
> [   97.274998] mscc_felix 0000:00:00.5: Found PCS at internal MDIO address 1
> [   97.282561] mscc_felix 0000:00:00.5: Found PCS at internal MDIO address 2
> [   97.289700] mscc_felix 0000:00:00.5: Found PCS at internal MDIO address 3
> [   97.599163] mscc_felix 0000:00:00.5 swp0 (uninitialized): PHY [0000:00:00.3:10] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
> [   97.862034] mscc_felix 0000:00:00.5 swp1 (uninitialized): PHY [0000:00:00.3:11] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
> [   97.950731] mscc_felix 0000:00:00.5 swp0: configuring for inband/qsgmii link mode
> [   97.964278] 8021q: adding VLAN 0 to HW filter on device swp0
> [   98.146161] mscc_felix 0000:00:00.5 swp2 (uninitialized): PHY [0000:00:00.3:12] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
> [   98.238649] mscc_felix 0000:00:00.5 swp1: configuring for inband/qsgmii link mode
> [   98.251845] 8021q: adding VLAN 0 to HW filter on device swp1
> [   98.433916] mscc_felix 0000:00:00.5 swp3 (uninitialized): PHY [0000:00:00.3:13] driver [Microsemi GE VSC8514 SyncE] (irq=POLL)
> [   98.485542] mscc_felix 0000:00:00.5: configuring for fixed/internal link mode
> [   98.503584] mscc_felix 0000:00:00.5: Link is Up - 2.5Gbps/Full - flow control rx/tx
> [   98.527948] device eno2 entered promiscuous mode
> [   98.544755] DSA: tree 0 setup
> 
> $ ping 10.0.0.1
> PING 10.0.0.1 (10.0.0.1): 56 data bytes
> 64 bytes from 10.0.0.1: seq=0 ttl=64 time=2.337 ms
> 64 bytes from 10.0.0.1: seq=1 ttl=64 time=0.754 ms
> ^C
> --- 10.0.0.1 ping statistics ---

Jakub, I was stupid and I pasted the ping command output into the commit
message, so git will trim anything past the dotted line as not part of
the commit message, which makes your netdev/verify_signedoff test fail.
If by some sort of miracle I don't need to resend a v9, do you think you
could just delete this and the next 2 lines?

> 2 packets transmitted, 2 packets received, 0% packet loss
> round-trip min/avg/max = 0.754/1.545/2.337 ms
> 
> $ cat /sys/class/net/eno2/dsa/tagging
> ocelot
> $ cat ./test_ocelot_8021q.sh
>         #!/bin/bash
> 
>         ip link set swp0 down
>         ip link set swp1 down
>         ip link set swp2 down
>         ip link set swp3 down
>         ip link set swp5 down
>         ip link set eno2 down
>         echo ocelot-8021q > /sys/class/net/eno2/dsa/tagging
>         ip link set eno2 up
>         ip link set swp0 up
>         ip link set swp1 up
>         ip link set swp2 up
>         ip link set swp3 up
>         ip link set swp5 up
> $ ./test_ocelot_8021q.sh
> ./test_ocelot_8021q.sh: line 9: echo: write error: Protocol not available
> $ rmmod tag_ocelot.ko
> rmmod: can't unload module 'tag_ocelot': Resource temporarily unavailable
> $ insmod tag_ocelot_8021q.ko
> $ ./test_ocelot_8021q.sh
> $ cat /sys/class/net/eno2/dsa/tagging
> ocelot-8021q
> $ rmmod tag_ocelot.ko
> $ rmmod tag_ocelot_8021q.ko
> rmmod: can't unload module 'tag_ocelot_8021q': Resource temporarily unavailable
> $ ping 10.0.0.1
> PING 10.0.0.1 (10.0.0.1): 56 data bytes
> 64 bytes from 10.0.0.1: seq=0 ttl=64 time=0.953 ms
> 64 bytes from 10.0.0.1: seq=1 ttl=64 time=0.787 ms
> 64 bytes from 10.0.0.1: seq=2 ttl=64 time=0.771 ms
> $ rmmod mscc_felix.ko
> [  645.544426] mscc_felix 0000:00:00.5: Link is Down
> [  645.838608] DSA: tree 0 torn down
> $ rmmod tag_ocelot_8021q.ko
> 
> Signed-off-by: Vladimir Oltean <vladimir.oltean@....com>
> ---
> Changes in v8:
> - Take reference on tagging driver module in dsa_find_tagger_by_name.
> - Replaced DSA_NOTIFIER_TAG_PROTO_SET and DSA_NOTIFIER_TAG_PROTO_DEL
>   with a single DSA_NOTIFIER_TAG_PROTO.
> - Combined .set_tag_protocol and .del_tag_protocol into a single
>   .change_tag_protocol, and we're no longer calling those 2 functions at
>   probe and unbind time.
> - Dropped review tags due to amount of changes.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ