···130130}131131EXPORT_SYMBOL_GPL(l3mdev_link_scope_lookup);132132133133-/**134134- * l3mdev_get_saddr - get source address for a flow based on an interface135135- * enslaved to an L3 master device136136- * @net: network namespace for device index lookup137137- * @ifindex: Interface index138138- * @fl4: IPv4 flow struct139139- */140140-141141-int l3mdev_get_saddr(struct net *net, int ifindex, struct flowi4 *fl4)142142-{143143- struct net_device *dev;144144- int rc = 0;145145-146146- if (ifindex) {147147- rcu_read_lock();148148-149149- dev = dev_get_by_index_rcu(net, ifindex);150150- if (dev && netif_is_l3_slave(dev))151151- dev = netdev_master_upper_dev_get_rcu(dev);152152-153153- if (dev && netif_is_l3_master(dev) &&154154- dev->l3mdev_ops->l3mdev_get_saddr)155155- rc = dev->l3mdev_ops->l3mdev_get_saddr(dev, fl4);156156-157157- rcu_read_unlock();158158- }159159-160160- return rc;161161-}162162-EXPORT_SYMBOL_GPL(l3mdev_get_saddr);163163-164133int l3mdev_get_saddr6(struct net *net, const struct sock *sk,165134 struct flowi6 *fl6)166135{