Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7616dcbb authored by Scott Feldman's avatar Scott Feldman Committed by David S. Miller
Browse files

switchdev: documentation: use switchdev_port_obj_xxx for IPv4 FIB add/modify/delete ops



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.

Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
Acked-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4b5364fb
Loading
Loading
Loading
Loading
+29 −24
Original line number Original line Diff line number Diff line
@@ -300,33 +300,38 @@ IGMP Snooping
XXX: complete this section
XXX: complete this section




L3 routing
L3 Routing Offload
----------
------------------


Offloading L3 routing requires that device be programmed with FIB entries from
Offloading L3 routing requires that device be programmed with FIB entries from
the kernel, with the device doing the FIB lookup and forwarding.  The device
the kernel, with the device doing the FIB lookup and forwarding.  The device
does a longest prefix match (LPM) on FIB entries matching route prefix and
does a longest prefix match (LPM) on FIB entries matching route prefix and
forwards the packet to the matching FIB entry's nexthop(s) egress ports.  To
forwards the packet to the matching FIB entry's nexthop(s) egress ports.
program the device, the switchdev driver is called with add/delete ops for IPv4

and IPv6 FIB entries.  For IPv4, the driver implements switchdev ops:
To program the device, the driver implements support for

SWITCHDEV_OBJ_IPV[4|6]_FIB object using switchdev_port_obj_xxx ops.
	int (*switchdev_fib_ipv4_add)(struct net_device *dev,
switchdev_port_obj_add is used for both adding a new FIB entry to the device,
				  __be32 dst, int dst_len,
or modifying an existing entry on the device.
				  struct fib_info *fi,

				  u8 tos, u8 type,
XXX: Currently, only SWITCHDEV_OBJ_IPV4_FIB objects are supported.
				  u32 nlflags, u32 tb_id);


SWITCHDEV_OBJ_IPV4_FIB object passes:
	int (*switchdev_fib_ipv4_del)(struct net_device *dev,

				  __be32 dst, int dst_len,
	struct switchdev_obj_ipv4_fib {         /* IPV4_FIB */
				  struct fib_info *fi,
		u32 dst;
				  u8 tos, u8 type,
		int dst_len;
				  u32 tb_id);
		struct fib_info *fi;

		u8 tos;
to add/delete IPv4 dst/dest_len prefix on table tb_id.  The *fi structure holds
		u8 type;
details on the route and route's nexthops.  *dev is one of the port netdevs
		u32 nlflags;
mentioned in the routes next hop list.  If the output port netdevs referenced
		u32 tb_id;
in the route's nexthop list don't all have the same switch ID, the driver is
	} ipv4_fib;
not called to add/delete the FIB entry.

to add/modify/delete IPv4 dst/dest_len prefix on table tb_id.  The *fi
structure holds details on the route and route's nexthops.  *dev is one of the
port netdevs mentioned in the routes next hop list.  If the output port netdevs
referenced in the route's nexthop list don't all have the same switch ID, the
driver is not called to add/modify/delete the FIB entry.


Routes offloaded to the device are labeled with "offload" in the ip route
Routes offloaded to the device are labeled with "offload" in the ip route
listing:
listing:
@@ -344,7 +349,7 @@ listing:
	12.0.0.4 via 11.0.0.9 dev sw1p2  proto zebra  metric 20 offload
	12.0.0.4 via 11.0.0.9 dev sw1p2  proto zebra  metric 20 offload
	192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15
	192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15


XXX: add/del IPv6 FIB API
XXX: add/mod/del IPv6 FIB API


Nexthop Resolution
Nexthop Resolution
^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^
+2 −2
Original line number Original line Diff line number Diff line
@@ -803,7 +803,7 @@ static struct net_device *switchdev_get_dev_by_nhs(struct fib_info *fi)
}
}


/**
/**
 *	switchdev_fib_ipv4_add - Add IPv4 route entry to switch
 *	switchdev_fib_ipv4_add - Add/modify switch IPv4 route entry
 *
 *
 *	@dst: route's IPv4 destination address
 *	@dst: route's IPv4 destination address
 *	@dst_len: destination address length (prefix length)
 *	@dst_len: destination address length (prefix length)
@@ -813,7 +813,7 @@ static struct net_device *switchdev_get_dev_by_nhs(struct fib_info *fi)
 *	@nlflags: netlink flags passed in (NLM_F_*)
 *	@nlflags: netlink flags passed in (NLM_F_*)
 *	@tb_id: route table ID
 *	@tb_id: route table ID
 *
 *
 *	Add IPv4 route entry to switch device.
 *	Add/modify switch IPv4 route entry.
 */
 */
int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi,
int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi,
			   u8 tos, u8 type, u32 nlflags, u32 tb_id)
			   u8 tos, u8 type, u32 nlflags, u32 tb_id)