From: ebiederm@xmission.com (Eric W. Biederman)
To: David Miller <davem@davemloft.net>
Cc: <netdev@vger.kernel.org>, Linux Containers <containers@lists.osdl.org>
Subject: [PATCH 2/2] veth: Configurable nterface MTU
Date: Wed, 25 Feb 2009 21:49:04 -0800 [thread overview]
Message-ID: <m1fxi1kasv.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <m1ljrtkavi.fsf@fess.ebiederm.org> (Eric W. Biederman's message of "Wed\, 25 Feb 2009 21\:47\:29 -0800")
The limitation to only 1500 byte mtu's limits the utility of the veth
device for testing routing.
Signed-off-by: Eric Biederman <ebiederm@aristanetworks.com>
---
drivers/net/veth.c | 24 +++++++++++++++++++++++-
1 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 124fe75..88778bb 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -19,6 +19,10 @@
#define DRV_NAME "veth"
#define DRV_VERSION "1.0"
+#define MIN_MTU 68 /* Min L3 MTU */
+#define MAX_MTU 65535 /* Max L3 MTU (arbitrary) */
+#define MTU_PAD (ETH_HLEN + 4) /* Max difference between L2 and L3 size MTU */
+
struct veth_net_stats {
unsigned long rx_packets;
unsigned long tx_packets;
@@ -159,7 +163,7 @@ static int veth_xmit(struct sk_buff *skb, struct net_device *dev)
cpu = smp_processor_id();
stats = per_cpu_ptr(priv->stats, cpu);
- if (!(rcv->flags & IFF_UP))
+ if (!(rcv->flags & IFF_UP) || (skb->len > (rcv->mtu + MTU_PAD)))
goto outf;
skb->pkt_type = PACKET_HOST;
@@ -249,6 +253,19 @@ static int veth_close(struct net_device *dev)
return 0;
}
+static int is_valid_veth_mtu(int new_mtu)
+{
+ return (new_mtu >= MIN_MTU && new_mtu <= MAX_MTU);
+}
+
+static int veth_change_mtu(struct net_device *dev, int new_mtu)
+{
+ if (is_valid_veth_mtu(new_mtu))
+ return -EINVAL;
+ dev->mtu = new_mtu;
+ return 0;
+}
+
static int veth_dev_init(struct net_device *dev)
{
struct veth_net_stats *stats;
@@ -277,6 +294,7 @@ static const struct net_device_ops veth_netdev_ops = {
.ndo_open = veth_open,
.ndo_stop = veth_close,
.ndo_start_xmit = veth_xmit,
+ .ndo_change_mtu = veth_change_mtu,
.ndo_get_stats = veth_get_stats,
.ndo_set_mac_address = eth_mac_addr,
};
@@ -303,6 +321,10 @@ static int veth_validate(struct nlattr *tb[], struct nlattr *data[])
if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
return -EADDRNOTAVAIL;
}
+ if (tb[IFLA_MTU]) {
+ if (is_valid_veth_mtu(nla_get_u32(tb[IFLA_MTU])))
+ return -EINVAL;
+ }
return 0;
}
--
1.6.1.2.350.g88cc
next prev parent reply other threads:[~2009-02-26 5:48 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-26 5:47 [PATCH 1/2] veth: Fix carrier detect Eric W. Biederman
2009-02-26 5:49 ` Eric W. Biederman [this message]
2009-02-27 10:49 ` [PATCH 2/2] veth: Configurable nterface MTU David Miller
2009-02-27 12:41 ` Eric W. Biederman
[not found] ` <m163iwf3w3.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2009-02-27 13:22 ` David Miller
2009-03-02 4:44 ` [PATCH 1/2] veth: Fix carrier detect David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1fxi1kasv.fsf@fess.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=containers@lists.osdl.org \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).