Clarify in documentation and code that IPV4 FIB add operation is used for both adding a new FIB entry to the device and for modifying an existing FIB entry on the device. Also, remove left-over references to ipv4_fib ops and replace with details on SWITCHDEV_PORT_IPV4_FIB object.
Unified · Split
| @@ -300,33 +300,38 @@ IGMP Snooping · 299 unmodified lines | ||
| 300 | 300 | XXX: complete this section |
| 301 | 301 | |
| 302 | 302 | |
| 303 | −L3 routing | |
| 304 | −---------- | |
| 303 | +L3 Routing Offload | |
| 304 | +------------------ | |
| 305 | 305 | |
| 306 | 306 | Offloading L3 routing requires that device be programmed with FIB entries from |
| 307 | 307 | the kernel, with the device doing the FIB lookup and forwarding. The device |
| 308 | 308 | does a longest prefix match (LPM) on FIB entries matching route prefix and |
| 309 | −forwards the packet to the matching FIB entry's nexthop(s) egress ports. To | |
| 310 | −program the device, the switchdev driver is called with add/delete ops for IPv4 | |
| 311 | −and IPv6 FIB entries. For IPv4, the driver implements switchdev ops: | |
| 312 | − | |
| 313 | − int (*switchdev_fib_ipv4_add)(struct net_device *dev, | |
| 314 | − __be32 dst, int dst_len, | |
| 315 | − struct fib_info *fi, | |
| 316 | − u8 tos, u8 type, | |
| 317 | − u32 nlflags, u32 tb_id); | |
| 318 | − | |
| 319 | − int (*switchdev_fib_ipv4_del)(struct net_device *dev, | |
| 320 | − __be32 dst, int dst_len, | |
| 321 | − struct fib_info *fi, | |
| 322 | − u8 tos, u8 type, | |
| 323 | − u32 tb_id); | |
| 324 | − | |
| 325 | −to add/delete IPv4 dst/dest_len prefix on table tb_id. The *fi structure holds | |
| 326 | −details on the route and route's nexthops. *dev is one of the port netdevs | |
| 327 | −mentioned in the routes next hop list. If the output port netdevs referenced | |
| 328 | −in the route's nexthop list don't all have the same switch ID, the driver is | |
| 329 | −not called to add/delete the FIB entry. | |
| 309 | +forwards the packet to the matching FIB entry's nexthop(s) egress ports. | |
| 310 | + | |
| 311 | +To program the device, the driver implements support for | |
| 312 | +SWITCHDEV_OBJ_IPV[4|6]_FIB object using switchdev_port_obj_xxx ops. | |
| 313 | +switchdev_port_obj_add is used for both adding a new FIB entry to the device, | |
| 314 | +or modifying an existing entry on the device. | |
| 315 | + | |
| 316 | +XXX: Currently, only SWITCHDEV_OBJ_IPV4_FIB objects are supported. | |
| 317 | + | |
| 318 | +SWITCHDEV_OBJ_IPV4_FIB object passes: | |
| 319 | + | |
| 320 | + struct switchdev_obj_ipv4_fib { /* IPV4_FIB */ | |
| 321 | + u32 dst; | |
| 322 | + int dst_len; | |
| 323 | + struct fib_info *fi; | |
| 324 | + u8 tos; | |
| 325 | + u8 type; | |
| 326 | + u32 nlflags; | |
| 327 | + u32 tb_id; | |
| 328 | + } ipv4_fib; | |
| 329 | + | |
| 330 | +to add/modify/delete IPv4 dst/dest_len prefix on table tb_id. The *fi | |
| 331 | +structure holds details on the route and route's nexthops. *dev is one of the | |
| 332 | +port netdevs mentioned in the routes next hop list. If the output port netdevs | |
| 333 | +referenced in the route's nexthop list don't all have the same switch ID, the | |
| 334 | +driver is not called to add/modify/delete the FIB entry. | |
| 330 | 335 | |
| 331 | 336 | Routes offloaded to the device are labeled with "offload" in the ip route |
| 332 | 337 | listing: |
| @@ -344,7 +349,7 @@ listing: · 11 unmodified lines | ||
| 344 | 349 | 12.0.0.4 via 11.0.0.9 dev sw1p2 proto zebra metric 20 offload |
| 345 | 350 | 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.15 |
| 346 | 351 | |
| 347 | −XXX: add/del IPv6 FIB API | |
| 352 | +XXX: add/mod/del IPv6 FIB API | |
| 348 | 353 | |
| 349 | 354 | Nexthop Resolution |
| 350 | 355 | ^^^^^^^^^^^^^^^^^^ |
| @@ -803,7 +803,7 @@ static struct net_device *switchdev_get_dev_by_nhs(struct fib_info *fi) · 802 unmodified lines | ||
| 803 | 803 | } |
| 804 | 804 | |
| 805 | 805 | /** |
| 806 | − * switchdev_fib_ipv4_add - Add IPv4 route entry to switch | |
| 806 | + * switchdev_fib_ipv4_add - Add/modify switch IPv4 route entry | |
| 807 | 807 | * |
| 808 | 808 | * @dst: route's IPv4 destination address |
| 809 | 809 | * @dst_len: destination address length (prefix length) |
| @@ -813,7 +813,7 @@ static struct net_device *switchdev_get_dev_by_nhs(struct fib_info *fi) · 3 unmodified lines | ||
| 813 | 813 | * @nlflags: netlink flags passed in (NLM_F_*) |
| 814 | 814 | * @tb_id: route table ID |
| 815 | 815 | * |
| 816 | − * Add IPv4 route entry to switch device. | |
| 816 | + * Add/modify switch IPv4 route entry. | |
| 817 | 817 | */ |
| 818 | 818 | int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, |
| 819 | 819 | u8 tos, u8 type, u32 nlflags, u32 tb_id) |