summaryrefslogtreecommitdiffstats
path: root/gatchat/ppp_net.c
diff options
context:
space:
mode:
authorKristen Carlson Accardi <kristen@linux.intel.com>2010-04-22 15:49:15 -0700
committerDenis Kenzior <denkenz@gmail.com>2010-04-22 17:56:31 -0500
commite98fb9a6bde592ec78fec49bdb3cbf614c2af457 (patch)
treecc9477bae2c93913ce64c3d23c40eb0da885cdcd /gatchat/ppp_net.c
parent6e28fd9396243540f769630aebe3c8dab978d56c (diff)
downloadofono-e98fb9a6bde592ec78fec49bdb3cbf614c2af457.tar.bz2
ppp: change MTU on TUN device when MRU option received
Diffstat (limited to 'gatchat/ppp_net.c')
-rw-r--r--gatchat/ppp_net.c23
1 files changed, 20 insertions, 3 deletions
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)