*/
#include <linux/capability.h>
+#include <linux/ethtool.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
if (skb_dst(skb))
skb_dst(skb)->ops->update_pmtu(skb_dst(skb), mtu);
+ /* XXX: Temporarily allow fragmentation since DF doesn't
+ * do the right thing with bridging. */
+/*
if (skb->protocol == htons(ETH_P_IP)) {
df |= (old_iph->frag_off&htons(IP_DF));
}
}
#endif
-
+*/
if (tunnel->err_count > 0) {
if (time_before(jiffies,
tunnel->err_time + IPTUNNEL_ERR_TIMEO)) {
if (mtu < 68)
mtu = 68;
+ /* XXX: Set MTU to the maximum possible value. If we are bridged to a
+ * device with a larger MTU then packets will be dropped. */
+ mtu = 65482;
+
return mtu;
}
#endif
+static void ethtool_getinfo(struct net_device *dev,
+ struct ethtool_drvinfo *info)
+{
+ strcpy(info->driver, "ip_gre");
+ strcpy(info->version, "Open vSwitch "VERSION BUILDNR);
+ strcpy(info->bus_info, dev->type == ARPHRD_ETHER ? "gretap" : "gre");
+}
+
+static struct ethtool_ops ethtool_ops = {
+ .get_drvinfo = ethtool_getinfo,
+};
+
#ifdef HAVE_NET_DEVICE_OPS
static const struct net_device_ops ipgre_netdev_ops = {
.ndo_init = ipgre_tunnel_init,
dev->addr_len = 4;
dev->features |= NETIF_F_NETNS_LOCAL;
dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
+
+ SET_ETHTOOL_OPS(dev, ðtool_ops);
}
static int ipgre_tunnel_init(struct net_device *dev)
dev->iflink = 0;
dev->features |= NETIF_F_NETNS_LOCAL;
+
+ SET_ETHTOOL_OPS(dev, ðtool_ops);
}
#ifndef GRE_IOCTL_ONLY