mirror of git://git.sysmocom.de/ofono
ppp: change MTU on TUN device when MRU option received
This commit is contained in:
parent
6e28fd9396
commit
e98fb9a6bd
|
@ -411,7 +411,8 @@ void ppp_net_up_notify(GAtPPP *ppp, const char *ip,
|
|||
{
|
||||
ppp->net = ppp_net_new(ppp);
|
||||
|
||||
ppp_net_set_mtu(ppp->net, ppp->mtu);
|
||||
if (ppp_net_set_mtu(ppp->net, ppp->mtu) == FALSE)
|
||||
g_printerr("Unable to set MTU\n");
|
||||
|
||||
if (ppp->connect_cb == NULL)
|
||||
return;
|
||||
|
|
|
@ -103,7 +103,7 @@ struct ppp_net *ppp_net_new(GAtPPP *ppp);
|
|||
const char *ppp_net_get_interface(struct ppp_net *net);
|
||||
void ppp_net_process_packet(struct ppp_net *net, guint8 *packet);
|
||||
void ppp_net_free(struct ppp_net *net);
|
||||
void ppp_net_set_mtu(struct ppp_net *net, guint16 mtu);
|
||||
gboolean ppp_net_set_mtu(struct ppp_net *net, guint16 mtu);
|
||||
|
||||
/* PPP functions related to main GAtPPP object */
|
||||
void ppp_debug(GAtPPP *ppp, const char *str);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue