On Tue, Jun 15, 2010 at 09:13:49AM +0200, Eric Dumazet wrote: > Le mardi 15 juin 2010 à 08:53 +0200, Jiri Olsa a écrit : > > hi, > > > > I prepared the patch 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. > > > > Obviously, you need to update documentation and man pages as well. > > MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 > M: Michael Kerrisk <mtk.manpages@xxxxxxxxx> > W: http://www.kernel.org/doc/man-pages > L: linux-man@xxxxxxxxxxxxxxx > S: Maintained hi, I updated the man page, and will send it in the new post. As for the in tree documentation, do you mean any specific doc? I haven't found any part related to the setsockopt options.. > > > > wbr, > > jirka > > > > > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > diff --git a/include/linux/in.h b/include/linux/in.h > > index 583c76f..41d88a4 100644 > > --- a/include/linux/in.h > > +++ b/include/linux/in.h > > @@ -85,6 +85,7 @@ struct in_addr { > > #define IP_RECVORIGDSTADDR IP_ORIGDSTADDR > > > > #define IP_MINTTL 21 > > +#define IP_NODEFRAG 22 > > > > /* IP_MTU_DISCOVER values */ > > #define IP_PMTUDISC_DONT 0 /* Never send DF frames */ > > diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h > > index 1653de5..1989cfd 100644 > > --- a/include/net/inet_sock.h > > +++ b/include/net/inet_sock.h > > @@ -137,7 +137,8 @@ struct inet_sock { > > hdrincl:1, > > mc_loop:1, > > transparent:1, > > - mc_all:1; > > + mc_all:1, > > + nodefrag:1; > > int mc_index; > > __be32 mc_addr; > > struct ip_mc_socklist *mc_list; > > diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c > > index 551ce56..84d2c8e 100644 > > --- a/net/ipv4/af_inet.c > > +++ b/net/ipv4/af_inet.c > > @@ -355,6 +355,8 @@ lookup_protocol: > > inet = inet_sk(sk); > > inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0; > > > > + inet->nodefrag = 0; > > + > > Hmm... what about cloning ? I think as this is the property of the socket (not skb), it has no affect for cloning thanks, jirka > > > if (SOCK_RAW == sock->type) { > > inet->inet_num = protocol; > > if (IPPROTO_RAW == protocol) > > diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c > > index ce23178..d8196e1 100644 > > --- a/net/ipv4/ip_sockglue.c > > +++ b/net/ipv4/ip_sockglue.c > > @@ -449,7 +449,7 @@ static int do_ip_setsockopt(struct sock *sk, int level, > > (1<<IP_MTU_DISCOVER) | (1<<IP_RECVERR) | > > (1<<IP_ROUTER_ALERT) | (1<<IP_FREEBIND) | > > (1<<IP_PASSSEC) | (1<<IP_TRANSPARENT) | > > - (1<<IP_MINTTL))) || > > + (1<<IP_MINTTL) | (1<<IP_NODEFRAG))) || > > optname == IP_MULTICAST_TTL || > > optname == IP_MULTICAST_ALL || > > optname == IP_MULTICAST_LOOP || > > @@ -572,6 +572,13 @@ static int do_ip_setsockopt(struct sock *sk, int level, > > } > > inet->hdrincl = val ? 1 : 0; > > break; > > + case IP_NODEFRAG: > > + if (sk->sk_type != SOCK_RAW) { > > + err = -ENOPROTOOPT; > > + break; > > + } > > + inet->nodefrag = val ? 1 : 0; > > + break; > > case IP_MTU_DISCOVER: > > if (val < IP_PMTUDISC_DONT || val > IP_PMTUDISC_PROBE) > > goto e_inval; > > diff --git a/net/ipv4/netfilter/nf_defrag_ipv4.c b/net/ipv4/netfilter/nf_defrag_ipv4.c > > index cb763ae..eab8de3 100644 > > --- a/net/ipv4/netfilter/nf_defrag_ipv4.c > > +++ b/net/ipv4/netfilter/nf_defrag_ipv4.c > > @@ -66,6 +66,11 @@ static unsigned int ipv4_conntrack_defrag(unsigned int hooknum, > > const struct net_device *out, > > int (*okfn)(struct sk_buff *)) > > { > > + struct inet_sock *inet = inet_sk(skb->sk); > > + > > + if (inet && inet->nodefrag) > > + return NF_ACCEPT; > > + > > #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) > > #if !defined(CONFIG_NF_NAT) && !defined(CONFIG_NF_NAT_MODULE) > > /* Previously seen (loopback)? Ignore. Do this before > > -- > > To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html