121 lines
4.3 KiB
Text
121 lines
4.3 KiB
Text
Index: src/iface.h
|
|
===================================================================
|
|
--- src/iface.h (revision 2246)
|
|
+++ src/iface.h (working copy)
|
|
@@ -107,6 +107,7 @@
|
|
u_char traffic[IFACE_IDLE_SPLIT]; /* Mark any traffic */
|
|
u_short mtu; /* Interface MTU */
|
|
u_short max_mtu; /* Configured maximum MTU */
|
|
+ u_short mtu_override; /* Configured MTU override */
|
|
struct optinfo options; /* Configuration options */
|
|
u_int idle_timeout; /* Idle timeout */
|
|
u_int session_timeout; /* Session timeout */
|
|
Index: src/iface.c
|
|
===================================================================
|
|
--- src/iface.c (revision 2246)
|
|
+++ src/iface.c (working copy)
|
|
@@ -162,7 +162,7 @@
|
|
IfaceSetCommand, NULL, 2, (void *) SET_ADDRS },
|
|
{ "route {dest}[/{width}]", "Add IP route",
|
|
IfaceSetCommand, NULL, 2, (void *) SET_ROUTE },
|
|
- { "mtu {size}", "Set max allowed interface MTU",
|
|
+ { "mtu {size} [override]", "Set max allowed or override interface MTU",
|
|
IfaceSetCommand, NULL, 2, (void *) SET_MTU },
|
|
{ "name [{name}]", "Set interface name",
|
|
IfaceSetCommand, NULL, 2, (void *) SET_NAME },
|
|
@@ -289,6 +289,7 @@ IfaceInit(Bund b)
|
|
/* Default configuration */
|
|
iface->mtu = NG_IFACE_MTU_DEFAULT;
|
|
iface->max_mtu = NG_IFACE_MTU_DEFAULT;
|
|
+ iface->mtu_override = 0;
|
|
#ifdef SIOCSIFDESCR
|
|
iface->ifdescr = NULL;
|
|
iface->conf.ifdescr = NULL;
|
|
@@ -1606,15 +1607,30 @@ IfaceSetCommand(Context ctx, int ac, cha
|
|
case SET_MTU:
|
|
{
|
|
int max_mtu;
|
|
+ int override;
|
|
|
|
/* Check */
|
|
- if (ac != 1)
|
|
+ if (ac < 1 || ac > 2)
|
|
return(-1);
|
|
|
|
max_mtu = atoi(av[0]);
|
|
+ override = 0;
|
|
+
|
|
+ if (ac == 2 && av[1][0]) {
|
|
+ if (strcmp(av[1], "override") == 0)
|
|
+ override = 1;
|
|
+ else
|
|
+ Error("Invalid keyword %s", av[1]);
|
|
+ }
|
|
+
|
|
if (max_mtu < IFACE_MIN_MTU || max_mtu > IFACE_MAX_MTU)
|
|
- Error("Invalid interface mtu %d", max_mtu);
|
|
- iface->max_mtu = max_mtu;
|
|
+ if (!override || max_mtu != 0)
|
|
+ Error("Invalid interface mtu %d", max_mtu);
|
|
+
|
|
+ if (max_mtu != 0)
|
|
+ iface->max_mtu = max_mtu;
|
|
+ if (override)
|
|
+ iface->mtu_override = max_mtu;
|
|
}
|
|
break;
|
|
|
|
@@ -1743,6 +1759,7 @@ IfaceStat(Context ctx, int ac, char *av[
|
|
Printf("\tGroup : %s\r\n", iface->conf.ifgroup);
|
|
#endif
|
|
Printf("\tMaximum MTU : %d bytes\r\n", iface->max_mtu);
|
|
+ Printf("\tMTU override : %d bytes\r\n", iface->mtu_override);
|
|
Printf("\tIdle timeout : %d seconds\r\n", iface->idle_timeout);
|
|
Printf("\tSession timeout : %d seconds\r\n", iface->session_timeout);
|
|
if (!u_rangeempty(&iface->conf.self_addr)) {
|
|
@@ -1873,14 +1890,18 @@ IfaceSetMTU(Bund b, int mtu)
|
|
return;
|
|
}
|
|
|
|
- if ((b->params.mtu > 0) && (mtu > b->params.mtu)) {
|
|
+ if (!iface->mtu_override && (b->params.mtu > 0) && (mtu > b->params.mtu)) {
|
|
mtu = b->params.mtu;
|
|
Log(LG_IFACE2, ("[%s] IFACE: forcing MTU of auth backend: %d bytes",
|
|
b->name, mtu));
|
|
}
|
|
|
|
- /* Limit MTU to configured maximum */
|
|
- if (mtu > iface->max_mtu)
|
|
+ /* Limit MTU to configured maximum/override */
|
|
+ if (iface->mtu_override) {
|
|
+ mtu = iface->mtu_override;
|
|
+ Log(LG_IFACE2, ("[%s] IFACE: forcing MTU override: %d bytes",
|
|
+ b->name, mtu));
|
|
+ } else if (mtu > iface->max_mtu)
|
|
mtu = iface->max_mtu;
|
|
|
|
/* Set MTU on interface */
|
|
@@ -3061,6 +3082,9 @@ IfaceSetupMSS(Bund b, uint16_t maxMSS)
|
|
memset(&tcpmsscfg, 0, sizeof(tcpmsscfg));
|
|
tcpmsscfg.maxMSS = maxMSS;
|
|
|
|
+ Log(LG_IFACE2, ("[%s] IFACE: Configuring ng_tcpmss %s %u",
|
|
+ b->name, path, (unsigned)tcpmsscfg.maxMSS));
|
|
+
|
|
snprintf(tcpmsscfg.inHook, sizeof(tcpmsscfg.inHook), "in");
|
|
snprintf(tcpmsscfg.outHook, sizeof(tcpmsscfg.outHook), "out");
|
|
if (NgSendMsg(gLinksCsock, path, NGM_TCPMSS_COOKIE, NGM_TCPMSS_CONFIG,
|
|
Index: src/bund.c
|
|
===================================================================
|
|
--- src/bund.c (revision 2253)
|
|
+++ src/bund.c (revision 2254)
|
|
@@ -328,7 +328,8 @@ BundJoin(Link l)
|
|
|
|
/* Configure this link */
|
|
b->pppConfig.links[l->bundleIndex].enableLink = 1;
|
|
- b->pppConfig.links[l->bundleIndex].mru = lcp->peer_mru;
|
|
+ b->pppConfig.links[l->bundleIndex].mru = b->iface.mtu_override ?
|
|
+ b->iface.mtu_override : lcp->peer_mru;
|
|
b->pppConfig.links[l->bundleIndex].enableACFComp = lcp->peer_acfcomp;
|
|
b->pppConfig.links[l->bundleIndex].enableProtoComp = lcp->peer_protocomp;
|
|
b->pppConfig.links[l->bundleIndex].bandwidth =
|