Florian Westphal
d6b915e29f
ip_fragment: don't forward defragmented DF packet
...
We currently always send fragments without DF bit set.
Thus, given following setup:
mtu1500 - mtu1500:1400 - mtu1400:1280 - mtu1280
A R1 R2 B
Where R1 and R2 run linux with netfilter defragmentation/conntrack
enabled, then if Host A sent a fragmented packet _with_ DF set to B, R1
will respond with icmp too big error if one of these fragments exceeded
1400 bytes.
However, if R1 receives fragment sizes 1200 and 100, it would
forward the reassembled packet without refragmenting, i.e.
R2 will send an icmp error in response to a packet that was never sent,
citing mtu that the original sender never exceeded.
The other minor issue is that a refragmentation on R1 will conceal the
MTU of R2-B since refragmentation does not set DF bit on the fragments.
This modifies ip_fragment so that we track largest fragment size seen
both for DF and non-DF packets, and set frag_max_size to the largest
value.
If the DF fragment size is larger or equal to the non-df one, we will
consider the packet a path mtu probe:
We set DF bit on the reassembled skb and also tag it with a new IPCB flag
to force refragmentation even if skb fits outdev mtu.
We will also set DF bit on each fragment in this case.
Joint work with Hannes Frederic Sowa.
Reported-by: Jesse Gross <jesse@nicira.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-05-27 13:03:31 -04:00
..
9p
9p: switch p9_client_read() to passing struct iov_iter *
2015-04-11 22:28:27 -04:00
bluetooth
Bluetooth: Read LE remote features during connection establishment
2015-04-09 08:36:54 +03:00
caif
caif: fix a signedness bug in cfpkt_iterate()
2015-02-20 17:35:14 -05:00
irda
irda: Convert function pointer arrays and uses to const
2014-12-10 15:33:16 -05:00
iucv
netfilter
netfilter: nf_tables: mark stateful expressions
2015-04-13 20:12:31 +02:00
netns
tcp: add rfc3168, section 6.1.1.1. fallback
2015-05-19 16:53:37 -04:00
nfc
nfc: nci: Add comment to explain NCI_HCI_MAX_PIPES
2015-04-06 00:19:05 +02:00
phonet
sctp
sctp: avoid to repeatedly declare external variables
2015-03-25 11:40:16 -04:00
tc_act
act_bpf: add initial eBPF support for actions
2015-03-20 19:10:44 -04:00
6lowpan.h
ieee802154: 6lowpan: rename process_data and lowpan_process_data
2014-10-27 15:51:16 +01:00
act_api.h
addrconf.h
net: Export IGMP/MLD message validation code
2015-05-04 14:49:23 -04:00
af_ieee802154.h
ieee802154: mac802154: remove FSF address
2014-10-25 08:07:30 +02:00
af_rxrpc.h
af_unix.h
af_vsock.h
net: Pass kern from net_proto_family.create to sk_alloc
2015-05-11 10:50:17 -04:00
ah.h
ipsec: Remove obsolete MAX_AH_AUTH_LEN
2014-09-18 10:54:36 +02:00
arp.h
neigh: Factor out ___neigh_lookup_noref
2015-03-04 00:23:23 -05:00
atmclip.h
ax25.h
ax25: Stop using magic neighbour cache operations.
2015-03-03 14:44:41 -05:00
ax88796.h
bond_3ad.h
bonding: Implement port churn-machine (AD standard 43.4.17).
2015-02-24 16:05:48 -05:00
bond_alb.h
net: Move bonding headers under include/net
2014-11-10 13:27:49 -05:00
bond_options.h
bonding: Implement user key part of port_key in an AD system.
2015-05-11 10:59:32 -04:00
bonding.h
bonding: Implement user key part of port_key in an AD system.
2015-05-11 10:59:32 -04:00
busy_poll.h
cfg80211-wext.h
cfg80211.h
cfg80211: change GO_CONCURRENT to IR_CONCURRENT for STA
2015-05-06 15:50:02 +02:00
cfg802154.h
cfg802154: pass name_assign_type to rdev_add_virtual_intf()
2015-04-30 18:48:10 +02:00
checksum.h
net: fix sparse error in csum_replace4()
2015-05-17 13:08:29 -04:00
cipso_ipv4.h
cipso: don't use IPCB() to locate the CIPSO IP option
2015-02-11 14:46:37 -05:00
cls_cgroup.h
codel.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-05-13 14:31:43 -04:00
compat.h
net: switch importing msghdr from userland to {compat_,}import_iovec()
2015-04-09 00:02:26 -04:00
datalink.h
dcbevent.h
dcbnl.h
net/dcb: Add IEEE QCN attribute
2015-03-06 21:50:02 -05:00
dn.h
dn_dev.h
dn_fib.h
dn_neigh.h
netfilter: Pass socket pointer down through okfn().
2015-04-07 15:25:55 -04:00
dn_nsp.h
dn_route.h
dsa.h
net: dsa: Add basic framework to support ndo_fdb functions
2015-03-29 13:23:54 -07:00
dsfield.h
dst.h
net: make skb_dst_pop routine static
2015-05-12 23:19:49 -04:00
dst_ops.h
net: Remove protocol from struct dst_ops
2015-03-09 16:06:10 -04:00
esp.h
ethoc.h
fib_rules.h
net: Kill hold_net release_net
2015-03-12 14:39:40 -04:00
firewire.h
flow.h
ipv4, fib: pass LOOPBACK_IFINDEX instead of 0 to flowi4_iif
2014-04-16 15:05:11 -04:00
flow_dissector.h
flow_dissector: change port array into src, dst tuple
2015-05-13 15:19:47 -04:00
flowcache.h
fou.h
ip_tunnel: Ops registration for secondary encap (fou, gue)
2014-11-12 15:01:35 -05:00
garp.h
gen_stats.h
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
genetlink.h
net: Introduce possible_net_t
2015-03-12 14:39:40 -04:00
geneve.h
geneve: move definition of geneve_hdr() to geneve.h
2015-05-13 15:59:13 -04:00
gre.h
gre: Call gso_make_checksum
2014-06-04 22:46:38 -07:00
gro_cells.h
ip_tunnel: Create percpu gro_cell
2015-01-18 01:56:32 -05:00
gue.h
gue: Protocol constants for remote checksum offload
2014-11-05 16:30:03 -05:00
icmp.h
ieee80211_radiotap.h
ieee802154_netdev.h
ieee802154: rework cca setting
2014-12-19 00:19:23 +01:00
if_inet6.h
ipv6: do retries on stable privacy addresses
2015-03-23 22:12:09 -04:00
inet6_connection_sock.h
inet: get rid of central tcp/dccp listener timer
2015-03-20 12:40:25 -04:00
inet6_hashtables.h
ipv6: get rid of __inet6_hash()
2015-03-18 22:00:35 -04:00
inet_common.h
net: Modify sk_alloc to not reference count the netns of kernel sockets.
2015-05-11 10:50:18 -04:00
inet_connection_sock.h
inet: properly align icsk_ca_priv
2015-05-19 11:08:00 -04:00
inet_ecn.h
tunnel: fix RFC number in comment for INET_ECN_decapsulate()
2014-05-07 15:30:52 -04:00
inet_frag.h
ip_fragment: don't forward defragmented DF packet
2015-05-27 13:03:31 -04:00
inet_hashtables.h
tcp: fix/cleanup inet_ehash_locks_alloc()
2015-05-26 19:48:46 -04:00
inet_sock.h
inet: fix request sock refcounting
2015-03-17 22:02:29 -04:00
inet_timewait_sock.h
tcp/dccp: get rid of central timewait timer
2015-04-13 16:40:05 -04:00
inetpeer.h
tcp: simplify inetpeer_addr_base use
2015-03-31 13:58:35 -04:00
ip.h
ip_fragment: don't forward defragmented DF packet
2015-05-27 13:03:31 -04:00
ip6_checksum.h
net: add gro_compute_pseudo functions
2014-08-24 18:09:23 -07:00
ip6_fib.h
ipv6: Create percpu rt6_info
2015-05-25 13:25:35 -04:00
ip6_route.h
ipv6: Add rt6_get_cookie() function
2015-05-25 13:25:34 -04:00
ip6_tunnel.h
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
2015-04-07 15:29:08 -04:00
ip_fib.h
ipv4: FIB Local/MAIN table collapse
2015-03-11 16:22:14 -04:00
ip_tunnels.h
ipip,gre,vti,sit: implement ndo_get_iflink
2015-04-02 14:05:00 -04:00
ip_vs.h
net: Introduce possible_net_t
2015-03-12 14:39:40 -04:00
ipcomp.h
ipconfig.h
ipv6.h
ipv6: ipv6_select_ident() returns a __be32
2015-05-25 20:27:11 -04:00
ipx.h
switch ipxrtr_route_packet() from iovec to msghdr
2014-11-24 04:28:49 -05:00
iw_handler.h
wext: add checked wrappers for adding events/points to streams
2015-02-28 21:31:12 +01:00
lapb.h
lib80211.h
lib80211: remove unused print_ssid()
2014-10-14 02:18:27 +02:00
llc.h
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc: Make llc_conn_ev_qfyr_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_conn.h
net: Pass kern from net_proto_family.create to sk_alloc
2015-05-11 10:50:17 -04:00
llc_if.h
llc_pdu.h
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc: Make llc_sap_action_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_sap.h
mac80211.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-05-13 14:31:43 -04:00
mac802154.h
mac802154: add description to mac802154 APIs
2015-04-30 18:48:09 +02:00
mip6.h
mld.h
ipv6: mld: answer mldv2 queries with mldv1 reports in mldv1 fallback
2014-09-22 16:23:15 -04:00
mpls.h
openvswitch: Add basic MPLS support to kernel
2014-11-05 23:52:33 -08:00
mrp.h
ndisc.h
neigh: Factor out ___neigh_lookup_noref
2015-03-04 00:23:23 -05:00
neighbour.h
net: neighbour: Add mcast_resolicit to configure the number of multicast resolicitations in PROBE state.
2015-03-20 21:47:40 -04:00
net_namespace.h
netns: make nsid_lock per net
2015-05-17 23:41:11 -04:00
net_ratelimit.h
netevent.h
netlabel.h
netlabel: fix the netlbl_catmap_setlong() dummy function
2014-08-07 20:55:21 -04:00
netlink.h
netlink: implement nla_get_in_addr and nla_get_in6_addr
2015-03-31 13:58:35 -04:00
netprio_cgroup.h
netrom.h
nexthop.h
nl802154.h
nl802154: introduce support for cca settings
2014-12-19 00:19:23 +01:00
p8022.h
ping.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
pkt_cls.h
net: sched: remove tcf_proto from ematch calls
2014-10-06 18:02:32 -04:00
pkt_sched.h
net: rename vlan_tx_* helpers since "tx" is misleading there
2015-01-13 17:51:08 -05:00
protocol.h
net: Eliminate no_check from protosw
2014-05-23 16:28:53 -04:00
psnap.h
raw.h
rawv6.h
red.h
regulatory.h
cfg80211: allow wiphy specific regdomain management
2014-12-17 11:49:55 +01:00
request_sock.h
tcp: provide SYN headers for passive connections
2015-05-05 16:02:34 -04:00
rose.h
route.h
ipv4: per cpu uncached list
2015-01-15 18:26:16 -05:00
rtnetlink.h
rtnetlink: Mark name argument of rtnl_create_link() const
2015-04-10 12:42:40 -07:00
sch_generic.h
net: sched: use counter to break reclassify loops
2015-05-13 15:08:14 -04:00
scm.h
secure_seq.h
inetpeer: get rid of ip_id_count
2014-06-02 11:00:41 -07:00
slhc_vj.h
snmp.h
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
sock.h
tcp: add a force_schedule argument to sk_stream_alloc_skb()
2015-05-21 16:56:40 -04:00
Space.h
stp.h
switchdev.h
switchdev: add support for fdb add/del/dump via switchdev_port_obj ops.
2015-05-17 22:49:09 -04:00
tcp.h
tcp: add rfc3168, section 6.1.1.1. fallback
2015-05-19 16:53:37 -04:00
tcp_memcontrol.h
tcp_states.h
inet: add TCP_NEW_SYN_RECV state
2015-03-12 22:58:12 -04:00
timewait_sock.h
transp_v6.h
tso.h
net: Add a software TSO helper API
2014-05-22 14:57:15 -04:00
udp.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
udp_tunnel.h
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
2015-04-07 15:29:08 -04:00
udplite.h
net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter()
2015-02-04 01:34:15 -05:00
vsock_addr.h
vxlan.h
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
2015-04-07 15:29:08 -04:00
wext.h
wimax.h
net: treewide: Fix typo found in DocBook/networking.xml
2014-09-05 17:35:28 -07:00
x25.h
x25device.h
xfrm.h
netfilter: Pass socket pointer down through okfn().
2015-04-07 15:25:55 -04:00