Bug #1952 » gtp-different-family-socket.patch
drivers/net/gtp.c | ||
---|---|---|
1332 | 1332 |
return 0; |
1333 | 1333 |
} |
1334 | 1334 | |
1335 |
#define GTP_TH_MAXLEN (sizeof(struct udphdr) + sizeof(struct gtp0_header)) |
|
1336 |
#define GTP_IPV6_MAXLEN (sizeof(struct ipv6hdr) + GTP_TH_MAXLEN) |
|
1337 | ||
1335 | 1338 |
static int gtp_newlink(struct net *src_net, struct net_device *dev, |
1336 | 1339 |
struct nlattr *tb[], struct nlattr *data[], |
1337 | 1340 |
struct netlink_ext_ack *extack) |
... | ... | |
1386 | 1389 |
if (err < 0) |
1387 | 1390 |
goto out_hashtable; |
1388 | 1391 | |
1392 |
if ((gtp->sk0 && gtp->sk0->sk_family == AF_INET6) || |
|
1393 |
(gtp->sk1u && gtp->sk1u->sk_family == AF_INET6)) { |
|
1394 |
dev->mtu = ETH_DATA_LEN - GTP_IPV6_MAXLEN; |
|
1395 |
dev->needed_headroom = LL_MAX_HEADER + GTP_IPV6_MAXLEN; |
|
1396 |
} |
|
1397 | ||
1389 | 1398 |
err = register_netdevice(dev); |
1390 | 1399 |
if (err < 0) { |
1391 | 1400 |
netdev_dbg(dev, "failed to register new netdev %d\n", err); |
... | ... | |
1587 | 1596 |
gtp->sk0 = sk0; |
1588 | 1597 |
gtp->sk1u = sk1u; |
1589 | 1598 | |
1599 |
if (sk0 && sk1u && |
|
1600 |
sk0->sk_family != sk1u->sk_family) { |
|
1601 |
gtp_encap_disable_sock(sk0); |
|
1602 |
gtp_encap_disable_sock(sk1u); |
|
1603 |
return -EINVAL; |
|
1604 |
} |
|
1605 | ||
1590 | 1606 |
return 0; |
1591 | 1607 |
} |
1592 | 1608 |
- « Previous
- 1
- …
- 31
- 32
- 33
- Next »