This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| network_stuff:linux_network_internals [2019/02/12 13:31] – external edit 127.0.0.1 | network_stuff:linux_network_internals [2023/11/02 14:38] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | Always use the -d flag when dealing with the netlink api: | + | LINUX KERNEL NETWORKING: |
| - | ip -d link show wlp2s0 | + | \\ |
| - | ip add show | egrep " | + | |
| - | * Interaction user-space >> kernel | + | Linux has Two main APIs for networking: |
| - | * Existing system call | + | * Ethtool is for physical link management (speed, duplex, buffers etc.) |
| - | * ioctl | + | * Netlink is for the rest. Every network device is represented as a netdev object in the kernel. |
| - | * /proc file | + | * **[[https:// |
| - | * NETLINK socket? | + | |
| - | **[[https:// | + | |
| - | Do not confuse it with NETFILTER (~iptables). \\ | + | {{ : |
| - | Netlink in python: [[https:// | + | |
| + | * Do not confuse it with NETFILTER (~iptables). | ||
| + | * iproute2 is more a set of **utililities** (arpd, bridge, devlink, ip, nstat, routef, rtacct, rtmon, | ||
| + | |||
| + | |||
| + | ---- | ||
| Place to find all information about interface is this, they are netdev, not just dev: | Place to find all information about interface is this, they are netdev, not just dev: | ||
| Line 19: | Line 23: | ||
| TODO\\ | TODO\\ | ||
| ... kernel objects and udev, and details of implementing logical interfaces that are associated with ASIC front-panel physical ports. From this discussion: [[http:// | ... kernel objects and udev, and details of implementing logical interfaces that are associated with ASIC front-panel physical ports. From this discussion: [[http:// | ||
| + | |||
| + | \\ | ||
| + | |||
| Interface can or cannot be related to physical port.\\ | Interface can or cannot be related to physical port.\\ | ||
| Linux labels them according to the PCI name, UUID can be used to rename them. udev, driver..\\ | Linux labels them according to the PCI name, UUID can be used to rename them. udev, driver..\\ | ||
| CPU-PCI BUS (unique) driver enumerates > port1,2,3 ... | CPU-PCI BUS (unique) driver enumerates > port1,2,3 ... | ||
| - | |||
| Then udev/uuid is used to map the name/rename the port name on boot time | Then udev/uuid is used to map the name/rename the port name on boot time | ||
| - | \\ | ||
| ---- | ---- | ||
| - | | + | Always use the -d flag when dealing with the netlink api: |
| + | ip -d link show wlp2s0 | ||
| + | ip add show | egrep " | ||
| + | |||
| + | * Interaction user-space >> kernel | ||
| + | * Existing system call | ||
| + | * ioctl | ||
| + | * /proc file | ||
| + | * NETLINK socket? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | * **eBPF [[https:// | ||
| + | | ||
| * P4 is very similar but needs compiling | * P4 is very similar but needs compiling | ||
| + | ---- | ||
| + | |||
| + | OVS (Open VSwitch):\\ | ||
| + | [[https:// | ||
| + | |||
| + | ovs-vswitchd --help | ||
| + | | ||
| + | |||
| + | ---- | ||
| + | Kernel structs | ||
| + | \\ | ||
| + | * '' | ||
| + | * '' | ||