aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/tun.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index d279151f065d..d8b8e68ef70b 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -172,6 +172,18 @@ tun_net_mclist(struct net_device *dev)
172 } 172 }
173} 173}
174 174
175#define MIN_MTU 68
176#define MAX_MTU 65535
177
178static int
179tun_net_change_mtu(struct net_device *dev, int new_mtu)
180{
181 if (new_mtu < MIN_MTU || new_mtu + dev->hard_header_len > MAX_MTU)
182 return -EINVAL;
183 dev->mtu = new_mtu;
184 return 0;
185}
186
175/* Initialize net device. */ 187/* Initialize net device. */
176static void tun_net_init(struct net_device *dev) 188static void tun_net_init(struct net_device *dev)
177{ 189{
@@ -183,6 +195,7 @@ static void tun_net_init(struct net_device *dev)
183 dev->hard_header_len = 0; 195 dev->hard_header_len = 0;
184 dev->addr_len = 0; 196 dev->addr_len = 0;
185 dev->mtu = 1500; 197 dev->mtu = 1500;
198 dev->change_mtu = tun_net_change_mtu;
186 199
187 /* Zero header length */ 200 /* Zero header length */
188 dev->type = ARPHRD_NONE; 201 dev->type = ARPHRD_NONE;
@@ -195,6 +208,7 @@ static void tun_net_init(struct net_device *dev)
195 dev->set_multicast_list = tun_net_mclist; 208 dev->set_multicast_list = tun_net_mclist;
196 209
197 ether_setup(dev); 210 ether_setup(dev);
211 dev->change_mtu = tun_net_change_mtu;
198 212
199 /* random address already created for us by tun_set_iff, use it */ 213 /* random address already created for us by tun_set_iff, use it */
200 memcpy(dev->dev_addr, tun->dev_addr, min(sizeof(tun->dev_addr), sizeof(dev->dev_addr)) ); 214 memcpy(dev->dev_addr, tun->dev_addr, min(sizeof(tun->dev_addr), sizeof(dev->dev_addr)) );