net/dsa/tag_rtl8_4.c
Source file repositories/reference/linux-study-clean/net/dsa/tag_rtl8_4.c
File Facts
- System
- Linux kernel
- Corpus path
net/dsa/tag_rtl8_4.c- Extension
.c- Size
- 8548 bytes
- Lines
- 267
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: implementation source
- Status
- source implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bitfield.hlinux/bits.hlinux/etherdevice.htag.h
Detected Declarations
function rtl8_4_write_tagfunction rtl8_4_read_tag
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* Handler for Realtek 8 byte switch tags
*
* Copyright (C) 2021 Alvin Šipraga <alsi@bang-olufsen.dk>
*
* NOTE: Currently only supports protocol "4" found in the RTL8365MB, hence
* named tag_rtl8_4.
*
* This tag has the following format:
*
* 0 7|8 15
* |-----------------------------------+-----------------------------------|---
* | (16-bit) | ^
* | Realtek EtherType [0x8899] | |
* |-----------------------------------+-----------------------------------| 8
* | (8-bit) | (8-bit) |
* | Protocol [0x04] | REASON | b
* |-----------------------------------+-----------------------------------| y
* | (1) | (3) | (1) | (3) | (1) | (1) | (1) | (5) | t
* | EFID_EN | EFID | PRI_EN | PRI | KEEP | VSEL | LEARN_DIS | VIDX | e
* |-----------------------------------+-----------------------------------| s
* | (1) | (15-bit) | |
* | ALLOW | TX/RX | v
* |-----------------------------------+-----------------------------------|---
*
* With the following field descriptions:
*
* field | description
* ------------+-------------
* Realtek | 0x8899: indicates that this is a proprietary Realtek tag;
* EtherType | note that Realtek uses the same EtherType for
* | other incompatible tag formats (e.g. tag_rtl4_a.c)
* Protocol | 0x04: indicates that this tag conforms to this format
* ------------+-------------
* REASON | reason for forwarding packet to CPU
* | 0: packet was forwarded or flooded to CPU
* | 80: packet was trapped to CPU
* EFID_EN | 1: packet has an EFID
* | 0: no EFID
* EFID | Extended filter ID (EFID) of packet (if EFID_EN=1)
* PRI_EN | 1: force priority of packet
* | 0: don't force priority
* PRI | priority of packet (if PRI_EN=1)
* KEEP | preserve packet VLAN tag format
* VSEL | 0: switch should classify packet according to VLAN tag
* | 1: switch should classify packet according to VLAN membership
* | configuration with index VIDX
* LEARN_DIS | don't learn the source MAC address of the packet
* VIDX | index of a VLAN membership configuration to use with VSEL
* ALLOW | 1: treat TX/RX field as an allowance port mask, meaning the
* | packet may only be forwarded to ports specified in the
* | mask
* | 0: no allowance port mask, TX/RX field is the forwarding
* | port mask
* TX/RX | TX (switch->CPU): port number the packet was received on
* | RX (CPU->switch): forwarding port mask (if ALLOW=0)
* | allowance port mask (if ALLOW=1)
*
* The tag can be positioned before Ethertype, using tag "rtl8_4":
*
* +--------+--------+------------+------+-----
* | MAC DA | MAC SA | 8 byte tag | Type | ...
* +--------+--------+------------+------+-----
*
* The tag can also appear between the end of the payload and before the CRC,
* using tag "rtl8_4t":
*
* +--------+--------+------+-----+---------+------------+-----+
* | MAC DA | MAC SA | TYPE | ... | payload | 8-byte tag | CRC |
* +--------+--------+------+-----+---------+------------+-----+
*
* The added bytes after the payload will break most checksums, either in
* software or hardware. To avoid this issue, if the checksum is still pending,
* this tagger checksums the packet in software before adding the tag.
*
*/
#include <linux/bitfield.h>
#include <linux/bits.h>
#include <linux/etherdevice.h>
#include "tag.h"
/* Protocols supported:
*
* 0x04 = RTL8365MB DSA protocol
*/
#define RTL8_4_NAME "rtl8_4"
Annotation
- Immediate include surface: `linux/bitfield.h`, `linux/bits.h`, `linux/etherdevice.h`, `tag.h`.
- Detected declarations: `function rtl8_4_write_tag`, `function rtl8_4_read_tag`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.