lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 18 Sep 2014 00:13:32 +0300 From: Sergei Shtylyov <sergei.shtylyov@...entembedded.com> To: David L Stevens <david.stevens@...cle.com>, David Miller <davem@...emloft.net> CC: netdev@...r.kernel.org Subject: Re: [PATCHv5 net-next 3/3] sunvnet: generate ICMP PTMUD messages for smaller port MTUs Hello. On 9/17/2014 11:49 PM, David L Stevens wrote: > This patch sends ICMP and ICMPv6 messages for Path MTU Discovery when a remote > port MTU is smaller than the device MTU. This allows mixing newer VIO protocol > devices that support MTU negotiation with older devices that do not on the > same vswitch. It also allows Linux-Linux LDOMs to use 64K-1 data packets even > though Solaris vswitch is limited to <16K MTU. > Signed-off-by: David L Stevens <david.stevens@...cle.com> > --- > drivers/net/ethernet/sun/sunvnet.c | 37 +++++++++++++++++++++++++++++++++++- > 1 files changed, 36 insertions(+), 1 deletions(-) > diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c > index 5e64e60..3c4ee18 100644 > --- a/drivers/net/ethernet/sun/sunvnet.c > +++ b/drivers/net/ethernet/sun/sunvnet.c [...] > @@ -791,8 +798,36 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev) > if (unlikely(!port)) > goto out_dropped; > > - if (skb->len > port->rmtu) > + if (skb->len > port->rmtu) { > + unsigned long localmtu = port->rmtu - ETH_HLEN; > + > + if (vio_version_after_eq(&port->vio, 1, 3)) > + localmtu -= VLAN_HLEN; > + > + if (skb->protocol == htons(ETH_P_IP)) { > + struct flowi4 fl4; > + struct rtable *rt = NULL; > + > + memset(&fl4, 0, sizeof(fl4)); > + fl4.flowi4_oif = dev->ifindex; > + fl4.flowi4_tos = RT_TOS(ip_hdr(skb)->tos); > + fl4.daddr = ip_hdr(skb)->daddr; > + fl4.saddr = ip_hdr(skb)->saddr; > + > + rt = ip_route_output_key(dev_net(dev), &fl4); > + if (!IS_ERR(rt)) { > + skb_dst_set(skb, &rt->dst); > + icmp_send(skb, ICMP_DEST_UNREACH, > + ICMP_FRAG_NEEDED, > + htonl(localmtu)); > + } > + } > +#if IS_ENABLED(CONFIG_IPV6) This #if could be avoided by extending the *if* statement below, no? > + else if (skb->protocol == htons(ETH_P_IPV6)) > + icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, localmtu); > +#endif > goto out_dropped; > + } WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists