forked from luck/tmp_suning_uos_patched
Merge branch 'gtp-fixes'
Andreas Schultz says: ==================== various gtp fixes I'm sorry for the compile error mess up in the last version. It's no excuse for not test compiling, but the hunks got lost in a rebase. This is the part of the previous "simple gtp improvements" series that Pablo indicated should go into net. The addition of the module alias fixes genl family autoloading, clearing the DF bit fixes a protocol violation in regard to the specification and the netns comparison fixes a corner case of cross netns recv. v2->v3: fix compiler error introduced in rebase ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
95120ebf64
@ -69,7 +69,6 @@ struct gtp_dev {
|
|||||||
struct socket *sock0;
|
struct socket *sock0;
|
||||||
struct socket *sock1u;
|
struct socket *sock1u;
|
||||||
|
|
||||||
struct net *net;
|
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
|
|
||||||
unsigned int hash_size;
|
unsigned int hash_size;
|
||||||
@ -316,7 +315,7 @@ static int gtp_encap_recv(struct sock *sk, struct sk_buff *skb)
|
|||||||
|
|
||||||
netdev_dbg(gtp->dev, "encap_recv sk=%p\n", sk);
|
netdev_dbg(gtp->dev, "encap_recv sk=%p\n", sk);
|
||||||
|
|
||||||
xnet = !net_eq(gtp->net, dev_net(gtp->dev));
|
xnet = !net_eq(sock_net(sk), dev_net(gtp->dev));
|
||||||
|
|
||||||
switch (udp_sk(sk)->encap_type) {
|
switch (udp_sk(sk)->encap_type) {
|
||||||
case UDP_ENCAP_GTP0:
|
case UDP_ENCAP_GTP0:
|
||||||
@ -612,7 +611,7 @@ static netdev_tx_t gtp_dev_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
pktinfo.fl4.saddr, pktinfo.fl4.daddr,
|
pktinfo.fl4.saddr, pktinfo.fl4.daddr,
|
||||||
pktinfo.iph->tos,
|
pktinfo.iph->tos,
|
||||||
ip4_dst_hoplimit(&pktinfo.rt->dst),
|
ip4_dst_hoplimit(&pktinfo.rt->dst),
|
||||||
htons(IP_DF),
|
0,
|
||||||
pktinfo.gtph_port, pktinfo.gtph_port,
|
pktinfo.gtph_port, pktinfo.gtph_port,
|
||||||
true, false);
|
true, false);
|
||||||
break;
|
break;
|
||||||
@ -658,7 +657,7 @@ static void gtp_link_setup(struct net_device *dev)
|
|||||||
static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize);
|
static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize);
|
||||||
static void gtp_hashtable_free(struct gtp_dev *gtp);
|
static void gtp_hashtable_free(struct gtp_dev *gtp);
|
||||||
static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
|
static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
|
||||||
int fd_gtp0, int fd_gtp1, struct net *src_net);
|
int fd_gtp0, int fd_gtp1);
|
||||||
|
|
||||||
static int gtp_newlink(struct net *src_net, struct net_device *dev,
|
static int gtp_newlink(struct net *src_net, struct net_device *dev,
|
||||||
struct nlattr *tb[], struct nlattr *data[])
|
struct nlattr *tb[], struct nlattr *data[])
|
||||||
@ -675,7 +674,7 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,
|
|||||||
fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
|
fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
|
||||||
fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
|
fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
|
||||||
|
|
||||||
err = gtp_encap_enable(dev, gtp, fd0, fd1, src_net);
|
err = gtp_encap_enable(dev, gtp, fd0, fd1);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
@ -821,7 +820,7 @@ static void gtp_hashtable_free(struct gtp_dev *gtp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
|
static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
|
||||||
int fd_gtp0, int fd_gtp1, struct net *src_net)
|
int fd_gtp0, int fd_gtp1)
|
||||||
{
|
{
|
||||||
struct udp_tunnel_sock_cfg tuncfg = {NULL};
|
struct udp_tunnel_sock_cfg tuncfg = {NULL};
|
||||||
struct socket *sock0, *sock1u;
|
struct socket *sock0, *sock1u;
|
||||||
@ -858,7 +857,6 @@ static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
|
|||||||
|
|
||||||
gtp->sock0 = sock0;
|
gtp->sock0 = sock0;
|
||||||
gtp->sock1u = sock1u;
|
gtp->sock1u = sock1u;
|
||||||
gtp->net = src_net;
|
|
||||||
|
|
||||||
tuncfg.sk_user_data = gtp;
|
tuncfg.sk_user_data = gtp;
|
||||||
tuncfg.encap_rcv = gtp_encap_recv;
|
tuncfg.encap_rcv = gtp_encap_recv;
|
||||||
@ -1376,3 +1374,4 @@ MODULE_LICENSE("GPL");
|
|||||||
MODULE_AUTHOR("Harald Welte <hwelte@sysmocom.de>");
|
MODULE_AUTHOR("Harald Welte <hwelte@sysmocom.de>");
|
||||||
MODULE_DESCRIPTION("Interface driver for GTP encapsulated traffic");
|
MODULE_DESCRIPTION("Interface driver for GTP encapsulated traffic");
|
||||||
MODULE_ALIAS_RTNL_LINK("gtp");
|
MODULE_ALIAS_RTNL_LINK("gtp");
|
||||||
|
MODULE_ALIAS_GENL_FAMILY("gtp");
|
||||||
|
Loading…
Reference in New Issue
Block a user