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 = 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)
|
if (ppp->connect_cb == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -103,7 +103,7 @@ struct ppp_net *ppp_net_new(GAtPPP *ppp);
|
||||||
const char *ppp_net_get_interface(struct ppp_net *net);
|
const char *ppp_net_get_interface(struct ppp_net *net);
|
||||||
void ppp_net_process_packet(struct ppp_net *net, guint8 *packet);
|
void ppp_net_process_packet(struct ppp_net *net, guint8 *packet);
|
||||||
void ppp_net_free(struct ppp_net *net);
|
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 */
|
/* PPP functions related to main GAtPPP object */
|
||||||
void ppp_debug(GAtPPP *ppp, const char *str);
|
void ppp_debug(GAtPPP *ppp, const char *str);
|
||||||
|
|
|
@ -48,12 +48,29 @@ struct ppp_net {
|
||||||
gint mtu;
|
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)
|
struct ifreq ifr;
|
||||||
return;
|
int sock;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (net == NULL || mtu >= MAX_PACKET)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
net->mtu = mtu;
|
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)
|
void ppp_net_process_packet(struct ppp_net *net, guint8 *packet)
|
||||||
|
|
Loading…
Reference in New Issue