From e98fb9a6bde592ec78fec49bdb3cbf614c2af457 Mon Sep 17 00:00:00 2001 From: Kristen Carlson Accardi Date: Thu, 22 Apr 2010 15:49:15 -0700 Subject: ppp: change MTU on TUN device when MRU option received --- gatchat/ppp_net.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'gatchat/ppp_net.c') diff --git a/gatchat/ppp_net.c b/gatchat/ppp_net.c index c1f2eb4c..b8b33554 100644 --- a/gatchat/ppp_net.c +++ b/gatchat/ppp_net.c @@ -48,12 +48,29 @@ struct ppp_net { gint mtu; }; -void ppp_net_set_mtu(struct ppp_net *net, guint16 mtu) +gboolean ppp_net_set_mtu(struct ppp_net *net, guint16 mtu) { - if (net == NULL) - return; + struct ifreq ifr; + int sock; + int rc; + + if (net == NULL || mtu >= MAX_PACKET) + return FALSE; net->mtu = mtu; + + sock = socket(AF_INET, SOCK_DGRAM, 0); + if (sock < 0) + return FALSE; + + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, net->if_name, sizeof(ifr.ifr_name)); + ifr.ifr_mtu = mtu; + + rc = ioctl(sock, SIOCSIFMTU, (caddr_t) &ifr); + + close(sock); + return (rc < 0) ? FALSE: TRUE; } void ppp_net_process_packet(struct ppp_net *net, guint8 *packet) -- cgit v1.2.3