| version 1.188, 2003/12/04 10:02:35 |
version 1.189, 2003/12/04 19:38:24 |
| Line 1917 ip_savecontrol(inp, mp, ip, m) |
|
| Line 1917 ip_savecontrol(inp, mp, ip, m) |
|
| } |
} |
| } |
} |
| |
|
| int |
/* |
| ip_sysctl(name, namelen, oldp, oldlenp, newp, newlen) |
* sysctl helper routine for net.inet.ip.mtudisctimeout. checks the |
| int *name; |
* range of the new value and tweaks timers if it changes. |
| u_int namelen; |
*/ |
| void *oldp; |
static int |
| size_t *oldlenp; |
sysctl_net_inet_ip_pmtudto(SYSCTLFN_ARGS) |
| void *newp; |
|
| size_t newlen; |
|
| { |
{ |
| extern int subnetsarelocal, hostzeroisbroadcast; |
int error, tmp; |
| |
struct sysctlnode node; |
| int error, old; |
|
| |
|
| /* All sysctl names (except ifq.*) at this level are terminal. */ |
node = *rnode; |
| if ((namelen != 1) && !(namelen == 2 && name[0] == IPCTL_IFQ)) |
tmp = ip_mtudisc_timeout; |
| return (ENOTDIR); |
node.sysctl_data = &tmp; |
| |
error = sysctl_lookup(SYSCTLFN_CALL(&node)); |
| switch (name[0]) { |
if (error || newp == NULL) |
| case IPCTL_FORWARDING: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, &ipforwarding)); |
|
| case IPCTL_SENDREDIRECTS: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ipsendredirects)); |
|
| case IPCTL_DEFTTL: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, &ip_defttl)); |
|
| #ifdef notyet |
|
| case IPCTL_DEFMTU: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, &ip_mtu)); |
|
| #endif |
|
| case IPCTL_FORWSRCRT: |
|
| /* Don't allow this to change in a secure environment. */ |
|
| if (securelevel > 0) |
|
| return (sysctl_rdint(oldp, oldlenp, newp, |
|
| ip_forwsrcrt)); |
|
| else |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_forwsrcrt)); |
|
| case IPCTL_DIRECTEDBCAST: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_directedbcast)); |
|
| case IPCTL_ALLOWSRCRT: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_allowsrcrt)); |
|
| case IPCTL_SUBNETSARELOCAL: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &subnetsarelocal)); |
|
| case IPCTL_MTUDISC: |
|
| error = sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_mtudisc); |
|
| if (error == 0 && ip_mtudisc == 0) |
|
| rt_timer_queue_remove_all(ip_mtudisc_timeout_q, TRUE); |
|
| return error; |
|
| case IPCTL_ANONPORTMIN: |
|
| old = anonportmin; |
|
| error = sysctl_int(oldp, oldlenp, newp, newlen, &anonportmin); |
|
| if (anonportmin >= anonportmax || anonportmin < 0 |
|
| || anonportmin > 65535 |
|
| #ifndef IPNOPRIVPORTS |
|
| || anonportmin < IPPORT_RESERVED |
|
| #endif |
|
| ) { |
|
| anonportmin = old; |
|
| return (EINVAL); |
|
| } |
|
| return (error); |
|
| case IPCTL_ANONPORTMAX: |
|
| old = anonportmax; |
|
| error = sysctl_int(oldp, oldlenp, newp, newlen, &anonportmax); |
|
| if (anonportmin >= anonportmax || anonportmax < 0 |
|
| || anonportmax > 65535 |
|
| #ifndef IPNOPRIVPORTS |
|
| || anonportmax < IPPORT_RESERVED |
|
| #endif |
|
| ) { |
|
| anonportmax = old; |
|
| return (EINVAL); |
|
| } |
|
| return (error); |
|
| case IPCTL_MTUDISCTIMEOUT: |
|
| old = ip_mtudisc_timeout; |
|
| error = sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_mtudisc_timeout); |
|
| if (ip_mtudisc_timeout < 0) { |
|
| ip_mtudisc_timeout = old; |
|
| return (EINVAL); |
|
| } |
|
| if (error == 0) |
|
| rt_timer_queue_change(ip_mtudisc_timeout_q, |
|
| ip_mtudisc_timeout); |
|
| return (error); |
return (error); |
| |
if (tmp < 0) |
| |
return (EINVAL); |
| |
|
| |
ip_mtudisc_timeout = tmp; |
| |
rt_timer_queue_change(ip_mtudisc_timeout_q, ip_mtudisc_timeout); |
| |
|
| |
return (0); |
| |
} |
| |
|
| #ifdef GATEWAY |
#ifdef GATEWAY |
| case IPCTL_MAXFLOWS: |
/* |
| { |
* sysctl helper routine for net.inet.ip.maxflows. apparently if |
| int s; |
* maxflows is even looked up, we "reap flows". |
| |
*/ |
| error = sysctl_int(oldp, oldlenp, newp, newlen, |
static int |
| &ip_maxflows); |
sysctl_net_inet_ip_maxflows(SYSCTLFN_ARGS) |
| s = splsoftnet(); |
{ |
| ipflow_reap(0); |
int s; |
| splx(s); |
|
| return (error); |
|
| } |
|
| #endif |
|
| case IPCTL_HOSTZEROBROADCAST: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &hostzeroisbroadcast)); |
|
| #if NGIF > 0 |
|
| case IPCTL_GIF_TTL: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_gif_ttl)); |
|
| #endif |
|
| |
|
| #if NGRE > 0 |
s = sysctl_lookup(SYSCTLFN_CALL(rnode)); |
| case IPCTL_GRE_TTL: |
if (s) |
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
return (s); |
| &ip_gre_ttl)); |
|
| #endif |
s = splsoftnet(); |
| |
ipflow_reap(0); |
| |
splx(s); |
| |
|
| #ifndef IPNOPRIVPORTS |
return (0); |
| case IPCTL_LOWPORTMIN: |
} |
| old = lowportmin; |
#endif /* GATEWAY */ |
| error = sysctl_int(oldp, oldlenp, newp, newlen, &lowportmin); |
|
| if (lowportmin >= lowportmax |
|
| || lowportmin > IPPORT_RESERVEDMAX |
|
| || lowportmin < IPPORT_RESERVEDMIN |
|
| ) { |
|
| lowportmin = old; |
|
| return (EINVAL); |
|
| } |
|
| return (error); |
|
| case IPCTL_LOWPORTMAX: |
|
| old = lowportmax; |
|
| error = sysctl_int(oldp, oldlenp, newp, newlen, &lowportmax); |
|
| if (lowportmin >= lowportmax |
|
| || lowportmax > IPPORT_RESERVEDMAX |
|
| || lowportmax < IPPORT_RESERVEDMIN |
|
| ) { |
|
| lowportmax = old; |
|
| return (EINVAL); |
|
| } |
|
| return (error); |
|
| #endif |
|
| |
|
| case IPCTL_MAXFRAGPACKETS: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_maxfragpackets)); |
|
| |
|
| case IPCTL_CHECKINTERFACE: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_checkinterface)); |
|
| |
|
| case IPCTL_IFQ: |
|
| return (sysctl_ifq(name + 1, namelen - 1, oldp, oldlenp, |
|
| newp, newlen, &ipintrq)); |
|
| |
|
| case IPCTL_RANDOMID: |
|
| return (sysctl_int(oldp, oldlenp, newp, newlen, |
|
| &ip_do_randomid)); |
|
| |
|
| default: |
SYSCTL_SETUP(sysctl_net_inet_ip_setup, "sysctl net.inet.ip subtree setup") |
| return (EOPNOTSUPP); |
{ |
| } |
extern int subnetsarelocal, hostzeroisbroadcast; |
| /* NOTREACHED */ |
|
| |
sysctl_createv(SYSCTL_PERMANENT, |
| |
CTLTYPE_NODE, "net", NULL, |
| |
NULL, 0, NULL, 0, |
| |
CTL_NET, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT, |
| |
CTLTYPE_NODE, "inet", NULL, |
| |
NULL, 0, NULL, 0, |
| |
CTL_NET, PF_INET, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT, |
| |
CTLTYPE_NODE, "ip", NULL, |
| |
NULL, 0, NULL, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, CTL_EOL); |
| |
|
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "forwarding", NULL, |
| |
NULL, 0, &ipforwarding, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_FORWARDING, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "redirect", NULL, |
| |
NULL, 0, &ipsendredirects, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_SENDREDIRECTS, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "ttl", NULL, |
| |
NULL, 0, &ip_defttl, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_DEFTTL, CTL_EOL); |
| |
#ifdef IPCTL_DEFMTU |
| |
sysctl_createv(SYSCTL_PERMANENT /* |SYSCTL_READWRITE? */, |
| |
CTLTYPE_INT, "mtu", NULL, |
| |
NULL, 0, &ip_mtu, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_DEFMTU, CTL_EOL); |
| |
#endif /* IPCTL_DEFMTU */ |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READONLY1, |
| |
CTLTYPE_INT, "forwsrcrt", NULL, |
| |
NULL, 0, &ip_forwsrcrt, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_FORWSRCRT, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "directed-broadcast", NULL, |
| |
NULL, 0, &ip_directedbcast, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_DIRECTEDBCAST, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "allowsrcrt", NULL, |
| |
NULL, 0, &ip_allowsrcrt, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_ALLOWSRCRT, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "subnetsarelocal", NULL, |
| |
NULL, 0, &subnetsarelocal, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_SUBNETSARELOCAL, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "mtudisc", NULL, |
| |
NULL, 0, &ip_mtudisc, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_MTUDISC, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "anonportmin", NULL, |
| |
sysctl_net_inet_ip_ports, 0, &anonportmin, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_ANONPORTMIN, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "anonportmax", NULL, |
| |
sysctl_net_inet_ip_ports, 0, &anonportmax, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_ANONPORTMAX, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "mtudisctimeout", NULL, |
| |
sysctl_net_inet_ip_pmtudto, 0, &ip_mtudisc_timeout, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_MTUDISCTIMEOUT, CTL_EOL); |
| |
#ifdef GATEWAY |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "maxflows", NULL, |
| |
sysctl_net_inet_ip_maxflows, 0, &ip_maxflows, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_MAXFLOWS, CTL_EOL); |
| |
#endif /* GATEWAY */ |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "hostzerobroadcast", NULL, |
| |
NULL, 0, &hostzeroisbroadcast, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_HOSTZEROBROADCAST, CTL_EOL); |
| |
#if NGIF > 0 |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "gifttl", NULL, |
| |
NULL, 0, &ip_gif_ttl, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_GIF_TTL, CTL_EOL); |
| |
#endif /* NGIF */ |
| |
#ifndef IPNOPRIVPORTS |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "lowportmin", NULL, |
| |
sysctl_net_inet_ip_ports, 0, &lowportmin, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_LOWPORTMIN, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "lowportmax", NULL, |
| |
sysctl_net_inet_ip_ports, 0, &lowportmax, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_LOWPORTMAX, CTL_EOL); |
| |
#endif /* IPNOPRIVPORTS */ |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "maxfragpackets", NULL, |
| |
NULL, 0, &ip_maxfragpackets, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_MAXFRAGPACKETS, CTL_EOL); |
| |
#if NGRE > 0 |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "grettl", NULL, |
| |
NULL, 0, &ip_gre_ttl, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_GRE_TTL, CTL_EOL); |
| |
#endif /* NGRE */ |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "checkinterface", NULL, |
| |
NULL, 0, &ip_checkinterface, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_CHECKINTERFACE, CTL_EOL); |
| |
sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, |
| |
CTLTYPE_INT, "random_id", NULL, |
| |
NULL, 0, &ip_do_randomid, 0, |
| |
CTL_NET, PF_INET, IPPROTO_IP, |
| |
IPCTL_RANDOMID, CTL_EOL); |
| } |
} |