Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
@@ -29,7 +29,7 @@ struct l3mdev_ops {
|
||||
/* IPv4 ops */
|
||||
struct rtable * (*l3mdev_get_rtable)(const struct net_device *dev,
|
||||
const struct flowi4 *fl4);
|
||||
void (*l3mdev_get_saddr)(struct net_device *dev,
|
||||
int (*l3mdev_get_saddr)(struct net_device *dev,
|
||||
struct flowi4 *fl4);
|
||||
|
||||
/* IPv6 ops */
|
||||
@@ -130,10 +130,11 @@ static inline bool netif_index_is_l3_master(struct net *net, int ifindex)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static inline void l3mdev_get_saddr(struct net *net, int ifindex,
|
||||
struct flowi4 *fl4)
|
||||
static inline int l3mdev_get_saddr(struct net *net, int ifindex,
|
||||
struct flowi4 *fl4)
|
||||
{
|
||||
struct net_device *dev;
|
||||
int rc = 0;
|
||||
|
||||
if (ifindex) {
|
||||
|
||||
@@ -142,11 +143,13 @@ static inline void l3mdev_get_saddr(struct net *net, int ifindex,
|
||||
dev = dev_get_by_index_rcu(net, ifindex);
|
||||
if (dev && netif_is_l3_master(dev) &&
|
||||
dev->l3mdev_ops->l3mdev_get_saddr) {
|
||||
dev->l3mdev_ops->l3mdev_get_saddr(dev, fl4);
|
||||
rc = dev->l3mdev_ops->l3mdev_get_saddr(dev, fl4);
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static inline struct dst_entry *l3mdev_get_rt6_dst(const struct net_device *dev,
|
||||
@@ -223,9 +226,10 @@ static inline bool netif_index_is_l3_master(struct net *net, int ifindex)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void l3mdev_get_saddr(struct net *net, int ifindex,
|
||||
struct flowi4 *fl4)
|
||||
static inline int l3mdev_get_saddr(struct net *net, int ifindex,
|
||||
struct flowi4 *fl4)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
|
@@ -283,7 +283,12 @@ static inline struct rtable *ip_route_connect(struct flowi4 *fl4,
|
||||
sport, dport, sk);
|
||||
|
||||
if (!src && oif) {
|
||||
l3mdev_get_saddr(net, oif, fl4);
|
||||
int rc;
|
||||
|
||||
rc = l3mdev_get_saddr(net, oif, fl4);
|
||||
if (rc < 0)
|
||||
return ERR_PTR(rc);
|
||||
|
||||
src = fl4->saddr;
|
||||
}
|
||||
if (!dst || !src) {
|
||||
|
Reference in New Issue
Block a user