Commit 7b2ff18ee7b0ec4bc3162f821e221781aaca48bd
Committed by
David S. Miller
1 parent
01fc3e86c6
Exists in
master
and in
4 other branches
net - IP_NODEFRAG option for IPv4 socket
this patch is implementing IP_NODEFRAG option for IPv4 socket. The reason is, there's no other way to send out the packet with user customized header of the reassembly part. Signed-off-by: Jiri Olsa <jolsa@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 5 changed files with 18 additions and 2 deletions Side-by-side Diff
include/linux/in.h
include/net/inet_sock.h
net/ipv4/af_inet.c
net/ipv4/ip_sockglue.c
... | ... | @@ -465,7 +465,7 @@ |
465 | 465 | (1<<IP_MTU_DISCOVER) | (1<<IP_RECVERR) | |
466 | 466 | (1<<IP_ROUTER_ALERT) | (1<<IP_FREEBIND) | |
467 | 467 | (1<<IP_PASSSEC) | (1<<IP_TRANSPARENT) | |
468 | - (1<<IP_MINTTL))) || | |
468 | + (1<<IP_MINTTL) | (1<<IP_NODEFRAG))) || | |
469 | 469 | optname == IP_MULTICAST_TTL || |
470 | 470 | optname == IP_MULTICAST_ALL || |
471 | 471 | optname == IP_MULTICAST_LOOP || |
... | ... | @@ -587,6 +587,13 @@ |
587 | 587 | break; |
588 | 588 | } |
589 | 589 | inet->hdrincl = val ? 1 : 0; |
590 | + break; | |
591 | + case IP_NODEFRAG: | |
592 | + if (sk->sk_type != SOCK_RAW) { | |
593 | + err = -ENOPROTOOPT; | |
594 | + break; | |
595 | + } | |
596 | + inet->nodefrag = val ? 1 : 0; | |
590 | 597 | break; |
591 | 598 | case IP_MTU_DISCOVER: |
592 | 599 | if (val < IP_PMTUDISC_DONT || val > IP_PMTUDISC_PROBE) |
net/ipv4/netfilter/nf_defrag_ipv4.c
... | ... | @@ -66,6 +66,11 @@ |
66 | 66 | const struct net_device *out, |
67 | 67 | int (*okfn)(struct sk_buff *)) |
68 | 68 | { |
69 | + struct inet_sock *inet = inet_sk(skb->sk); | |
70 | + | |
71 | + if (inet && inet->nodefrag) | |
72 | + return NF_ACCEPT; | |
73 | + | |
69 | 74 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) |
70 | 75 | #if !defined(CONFIG_NF_NAT) && !defined(CONFIG_NF_NAT_MODULE) |
71 | 76 | /* Previously seen (loopback)? Ignore. Do this before |