freebsd-ports/net/mpd5/files/patch-mtu-override

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 =