Lines Matching +full:cfg +full:- +full:space

1 /*-
2 * Copyright (c) 2002-2003 Luigi Rizzo
3 * Copyright (c) 1996 Alex Nash, Paul Traina, Poul-Henning Kamp
20 * In-kernel nat support
46 typedef int (nat_cb_t)(struct nat44_cfg_nat *cfg, void *arg);
49 static int nat_show_data(struct nat44_cfg_nat *cfg, void *arg);
78 * n->ip ip address of interface "ifn"
79 * n->if_name copy of interface name "ifn"
102 if (sysctl(mib, 6, NULL, &needed, NULL, 0) == -1) in set_addr_dynamic()
103 err(1, "iflist-sysctl-estimate"); in set_addr_dynamic()
105 if (sysctl(mib, 6, buf, &needed, NULL, 0) == -1) in set_addr_dynamic()
106 err(1, "iflist-sysctl-get"); in set_addr_dynamic()
118 next += ifm->ifm_msglen; in set_addr_dynamic()
119 if (ifm->ifm_version != RTM_VERSION) { in set_addr_dynamic()
122 "not understood", ifm->ifm_version); in set_addr_dynamic()
125 if (ifm->ifm_type == RTM_IFINFO) { in set_addr_dynamic()
127 if (strlen(ifn) == sdl->sdl_nlen && in set_addr_dynamic()
128 strncmp(ifn, sdl->sdl_data, sdl->sdl_nlen) == 0) { in set_addr_dynamic()
129 ifIndex = ifm->ifm_index; in set_addr_dynamic()
142 next += ifam->ifam_msglen; in set_addr_dynamic()
143 if (ifam->ifam_version != RTM_VERSION) { in set_addr_dynamic()
146 "not understood", ifam->ifam_version); in set_addr_dynamic()
149 if (ifam->ifam_type != RTM_NEWADDR) in set_addr_dynamic()
151 if (ifam->ifam_addrs & RTA_IFA) { in set_addr_dynamic()
156 if (ifam->ifam_addrs & i) in set_addr_dynamic()
159 if (((struct sockaddr *)cp)->sa_family == AF_INET) { in set_addr_dynamic()
166 n->ip.s_addr = htonl(INADDR_ANY); in set_addr_dynamic()
168 n->ip = sin->sin_addr; in set_addr_dynamic()
169 strncpy(n->if_name, ifn, IF_NAMESIZE); in set_addr_dynamic()
175 * XXX - The following functions, macros and definitions come from natd.c:
183 * FORMAT: HI 16-bits == first port in range, 0 == all ports.
184 * LO 16-bits == number of ports in range
185 * NOTES: - Port values are not stored in network byte order.
194 /* Set y to be the low-port value in port_range variable x. */
212 memcpy (addr, hp->h_addr, sizeof (struct in_addr)); in StrToAddr()
227 SETLOPORT(*portRange, ntohs(sp->s_port)); in StrToPortRange()
233 sep = strchr (str, '-'); in StrToPortRange()
247 sscanf (str, "%hu-%hu", &loPort, &hiPort); in StrToPortRange()
251 SETNUMPORTS(*portRange, hiPort - loPort + 1); in StrToPortRange()
305 * ------------------------------------- ------------
307 * ------------------------------------- ...... ------------
309 * spool_cnt n=0 ...... n=(X-1)
311 * len points to the amount of available space in buf
312 * space counts the memory consumed by every function
314 * XXX - Every function get all the argv params so it
324 size_t space = sizeof(struct nat44_cfg_redir); in estimate_redir_addr() local
337 space += c * sizeof(struct nat44_cfg_spool); in estimate_redir_addr()
339 return (space); in estimate_redir_addr()
347 size_t space; in setup_redir_addr() local
350 r->mode = REDIR_ADDR; in setup_redir_addr()
353 space = sizeof(struct nat44_cfg_redir); in setup_redir_addr()
360 r->laddr.s_addr = INADDR_NONE; in setup_redir_addr()
364 space += sizeof(struct nat44_cfg_spool); in setup_redir_addr()
365 StrToAddr(sep, &spool->addr); in setup_redir_addr()
366 spool->port = ~0; in setup_redir_addr()
367 r->spool_cnt++; in setup_redir_addr()
373 StrToAddr(**av, &r->laddr); in setup_redir_addr()
374 (*av)++; (*ac)--; in setup_redir_addr()
377 StrToAddr(**av, &r->paddr); in setup_redir_addr()
378 (*av)++; (*ac)--; in setup_redir_addr()
380 return (space); in setup_redir_addr()
386 size_t space = sizeof(struct nat44_cfg_redir); in estimate_redir_port() local
399 space += c * sizeof(struct nat44_cfg_spool); in estimate_redir_port()
401 return (space); in estimate_redir_port()
409 size_t space; in setup_redir_port() local
416 r->mode = REDIR_PORT; in setup_redir_port()
419 space = sizeof(struct nat44_cfg_redir); in setup_redir_port()
424 r->proto = StrToProto(**av); in setup_redir_port()
426 (*av)++; (*ac)--; in setup_redir_port()
432 r->laddr.s_addr = INADDR_NONE; in setup_redir_port()
433 r->lport = ~0; in setup_redir_port()
442 if (r->proto == IPPROTO_SCTP) { in setup_redir_port()
448 StrToAddr(**av, &r->laddr); in setup_redir_port()
450 if (StrToAddrAndPortRange(**av, &r->laddr, protoName, in setup_redir_port()
455 r->lport = GETLOPORT(portRange); in setup_redir_port()
459 (*av)++; (*ac)--; in setup_redir_port()
465 if (StrToAddrAndPortRange(**av, &r->paddr, protoName, in setup_redir_port()
470 r->paddr.s_addr = INADDR_ANY; in setup_redir_port()
476 r->pport = GETLOPORT(portRange); in setup_redir_port()
477 if (r->proto == IPPROTO_SCTP) { /* so the logic below still works */ in setup_redir_port()
479 r->lport = r->pport; in setup_redir_port()
481 r->pport_cnt = GETNUMPORTS(portRange); in setup_redir_port()
482 (*av)++; (*ac)--; in setup_redir_port()
493 if (StrToAddrAndPortRange(**av, &r->raddr, protoName, in setup_redir_port()
500 StrToAddr(**av, &r->raddr); in setup_redir_port()
502 (*av)++; (*ac)--; in setup_redir_port()
506 r->raddr.s_addr = INADDR_ANY; in setup_redir_port()
508 r->rport = GETLOPORT(portRange); in setup_redir_port()
509 r->rport_cnt = GETNUMPORTS(portRange); in setup_redir_port()
514 if (numLocalPorts != r->pport_cnt) in setup_redir_port()
519 if (r->rport_cnt != numLocalPorts && in setup_redir_port()
520 (r->rport_cnt != 1 || r->rport != 0)) in setup_redir_port()
531 space += sizeof(struct nat44_cfg_spool); in setup_redir_port()
537 if (r->proto == IPPROTO_SCTP) { in setup_redir_port()
544 StrToAddr(sep, &spool->addr); in setup_redir_port()
545 spool->port = r->pport; in setup_redir_port()
548 if (StrToAddrAndPortRange(sep, &spool->addr, in setup_redir_port()
556 spool->port = GETLOPORT(portRange); in setup_redir_port()
558 r->spool_cnt++; in setup_redir_port()
565 return (space); in setup_redir_port()
573 size_t space; in setup_redir_proto() local
576 r->mode = REDIR_PROTO; in setup_redir_proto()
579 space = sizeof(struct nat44_cfg_redir); in setup_redir_proto()
588 r->proto = protoent->p_proto; in setup_redir_proto()
590 (*av)++; (*ac)--; in setup_redir_proto()
595 StrToAddr(**av, &r->laddr); in setup_redir_proto()
597 (*av)++; (*ac)--; in setup_redir_proto()
603 r->paddr.s_addr = INADDR_ANY; in setup_redir_proto()
604 r->raddr.s_addr = INADDR_ANY; in setup_redir_proto()
608 StrToAddr(**av, &r->paddr); in setup_redir_proto()
609 (*av)++; (*ac)--; in setup_redir_proto()
616 StrToAddr(**av, &r->raddr); in setup_redir_proto()
617 (*av)++; (*ac)--; in setup_redir_proto()
622 return (space); in setup_redir_proto()
632 printf("nat %s: %s\n", n->name, buf); in nat_show_log()
647 printf("ipfw nat %s config", n->name); in nat_show_cfg()
648 if (strlen(n->if_name) != 0) in nat_show_cfg()
649 printf(" if %s", n->if_name); in nat_show_cfg()
650 else if (n->ip.s_addr != 0) in nat_show_cfg()
651 printf(" ip %s", inet_ntoa(n->ip)); in nat_show_cfg()
652 while (n->mode != 0) { in nat_show_cfg()
653 if (n->mode & PKT_ALIAS_LOG) { in nat_show_cfg()
655 n->mode &= ~PKT_ALIAS_LOG; in nat_show_cfg()
656 } else if (n->mode & PKT_ALIAS_DENY_INCOMING) { in nat_show_cfg()
658 n->mode &= ~PKT_ALIAS_DENY_INCOMING; in nat_show_cfg()
659 } else if (n->mode & PKT_ALIAS_SAME_PORTS) { in nat_show_cfg()
661 n->mode &= ~PKT_ALIAS_SAME_PORTS; in nat_show_cfg()
662 } else if (n->mode & PKT_ALIAS_SKIP_GLOBAL) { in nat_show_cfg()
664 n->mode &= ~PKT_ALIAS_SKIP_GLOBAL; in nat_show_cfg()
665 } else if (n->mode & PKT_ALIAS_UNREGISTERED_ONLY) { in nat_show_cfg()
667 n->mode &= ~PKT_ALIAS_UNREGISTERED_ONLY; in nat_show_cfg()
668 } else if (n->mode & PKT_ALIAS_UNREGISTERED_CGN) { in nat_show_cfg()
670 n->mode &= ~PKT_ALIAS_UNREGISTERED_CGN; in nat_show_cfg()
671 } else if (n->mode & PKT_ALIAS_RESET_ON_ADDR_CHANGE) { in nat_show_cfg()
673 n->mode &= ~PKT_ALIAS_RESET_ON_ADDR_CHANGE; in nat_show_cfg()
674 } else if (n->mode & PKT_ALIAS_REVERSE) { in nat_show_cfg()
676 n->mode &= ~PKT_ALIAS_REVERSE; in nat_show_cfg()
677 } else if (n->mode & PKT_ALIAS_PROXY_ONLY) { in nat_show_cfg()
679 n->mode &= ~PKT_ALIAS_PROXY_ONLY; in nat_show_cfg()
680 } else if (n->mode & PKT_ALIAS_UDP_EIM) { in nat_show_cfg()
682 n->mode &= ~PKT_ALIAS_UDP_EIM; in nat_show_cfg()
686 for (cnt = 0; cnt < n->redir_cnt; cnt++) { in nat_show_cfg()
689 switch (t->mode) { in nat_show_cfg()
692 if (t->spool_cnt == 0) in nat_show_cfg()
693 printf(" %s", inet_ntoa(t->laddr)); in nat_show_cfg()
695 for (i = 0; i < t->spool_cnt; i++) { in nat_show_cfg()
701 printf("%s", inet_ntoa(s->addr)); in nat_show_cfg()
704 printf(" %s", inet_ntoa(t->paddr)); in nat_show_cfg()
707 p = getprotobynumber(t->proto); in nat_show_cfg()
708 printf(" redirect_port %s ", p->p_name); in nat_show_cfg()
709 if (!t->spool_cnt) { in nat_show_cfg()
710 printf("%s:%u", inet_ntoa(t->laddr), t->lport); in nat_show_cfg()
711 if (t->pport_cnt > 1) in nat_show_cfg()
712 printf("-%u", t->lport + in nat_show_cfg()
713 t->pport_cnt - 1); in nat_show_cfg()
715 for (i=0; i < t->spool_cnt; i++) { in nat_show_cfg()
719 printf("%s:%u", inet_ntoa(s->addr), in nat_show_cfg()
720 s->port); in nat_show_cfg()
725 if (t->paddr.s_addr) in nat_show_cfg()
726 printf("%s:", inet_ntoa(t->paddr)); in nat_show_cfg()
727 printf("%u", t->pport); in nat_show_cfg()
728 if (!t->spool_cnt && t->pport_cnt > 1) in nat_show_cfg()
729 printf("-%u", t->pport + t->pport_cnt - 1); in nat_show_cfg()
731 if (t->raddr.s_addr) { in nat_show_cfg()
732 printf(" %s", inet_ntoa(t->raddr)); in nat_show_cfg()
733 if (t->rport) { in nat_show_cfg()
734 printf(":%u", t->rport); in nat_show_cfg()
735 if (!t->spool_cnt && t->rport_cnt > 1) in nat_show_cfg()
736 printf("-%u", t->rport + in nat_show_cfg()
737 t->rport_cnt - 1); in nat_show_cfg()
742 p = getprotobynumber(t->proto); in nat_show_cfg()
743 printf(" redirect_proto %s %s", p->p_name, in nat_show_cfg()
744 inet_ntoa(t->laddr)); in nat_show_cfg()
745 if (t->paddr.s_addr != 0) { in nat_show_cfg()
746 printf(" %s", inet_ntoa(t->paddr)); in nat_show_cfg()
747 if (t->raddr.s_addr) in nat_show_cfg()
748 printf(" %s", inet_ntoa(t->raddr)); in nat_show_cfg()
767 if (!ptr || *ptr != '-') in nat_port_alias_parse()
792 ac--; in ipfw_config_nat()
801 ac--; in ipfw_config_nat()
810 ac1--; in ipfw_config_nat()
816 ac1--; in ipfw_config_nat()
836 ac1 -= 2; in ipfw_config_nat()
843 ac1--; in ipfw_config_nat()
846 ac1 -= 2; in ipfw_config_nat()
850 ac1--; in ipfw_config_nat()
859 ac1 -= 2; in ipfw_config_nat()
863 ac1--; in ipfw_config_nat()
867 ac1--; in ipfw_config_nat()
871 errx(EX_DATAERR, "unrecognised option ``%s''", av1[-1]); in ipfw_config_nat()
878 /* Offset in buf: save space for header at the beginning. */ in ipfw_config_nat()
883 oh->ntlv.head.length = sizeof(oh->ntlv); in ipfw_config_nat()
884 snprintf(oh->ntlv.name, sizeof(oh->ntlv.name), "%d", i); in ipfw_config_nat()
885 snprintf(n->name, sizeof(n->name), "%d", i); in ipfw_config_nat()
889 ac--; in ipfw_config_nat()
895 if (!inet_aton(av[0], &(n->ip))) in ipfw_config_nat()
898 ac--; in ipfw_config_nat()
905 ac--; in ipfw_config_nat()
909 n->mode |= PKT_ALIAS_LOG; in ipfw_config_nat()
912 n->mode |= PKT_ALIAS_DENY_INCOMING; in ipfw_config_nat()
915 n->mode |= PKT_ALIAS_SAME_PORTS; in ipfw_config_nat()
918 n->mode |= PKT_ALIAS_UNREGISTERED_ONLY; in ipfw_config_nat()
921 n->mode |= PKT_ALIAS_UNREGISTERED_CGN; in ipfw_config_nat()
924 n->mode |= PKT_ALIAS_SKIP_GLOBAL; in ipfw_config_nat()
927 n->mode |= PKT_ALIAS_RESET_ON_ADDR_CHANGE; in ipfw_config_nat()
930 n->mode |= PKT_ALIAS_REVERSE; in ipfw_config_nat()
933 n->mode |= PKT_ALIAS_PROXY_ONLY; in ipfw_config_nat()
936 n->mode |= PKT_ALIAS_UDP_EIM; in ipfw_config_nat()
956 n->redir_cnt++; in ipfw_config_nat()
968 n->alias_port_lo = lp; in ipfw_config_nat()
969 n->alias_port_hi = hp; in ipfw_config_nat()
970 ac--; in ipfw_config_nat()
975 if (n->mode & PKT_ALIAS_SAME_PORTS && n->alias_port_lo) in ipfw_config_nat()
978 i = do_set3(IP_FW_NAT44_XCONFIG, &oh->opheader, len); in ipfw_config_nat()
994 ntlv->head.type = IPFW_TLV_EACTION_NAME(1); /* it doesn't matter */ in nat_fill_ntlv()
995 ntlv->head.length = sizeof(ipfw_obj_ntlv); in nat_fill_ntlv()
996 ntlv->idx = 1; in nat_fill_ntlv()
997 ntlv->set = 0; /* not yet */ in nat_fill_ntlv()
998 snprintf(ntlv->name, sizeof(ntlv->name), "%d", i); in nat_fill_ntlv()
1010 if (ret == -1) { in ipfw_delete_nat()
1024 nat_show_data(struct nat44_cfg_nat *cfg, void *arg) in nat_show_data() argument
1031 switch (nla->cmd) { in nat_show_data()
1033 if (nat_get_cmd(cfg->name, nla->cmd, &oh) != 0) { in nat_show_data()
1034 warnx("Error getting nat instance %s info", cfg->name); in nat_show_data()
1041 if (nat_get_cmd(cfg->name, nla->cmd, &oh) == 0) { in nat_show_data()
1047 if (nla->is_all != 0 && errno == ENOENT) in nat_show_data()
1049 warn("Error getting nat instance %s info", cfg->name); in nat_show_data()
1068 return (stringnum_cmp(ia->name, ib->name)); in natname_cmp()
1080 struct nat44_cfg_nat *cfg; in nat_foreach() local
1091 olh->size = sz; in nat_foreach()
1092 if (do_get3(IP_FW_NAT44_LIST_NAT, &olh->opheader, &sz) != 0) { in nat_foreach()
1093 sz = olh->size; in nat_foreach()
1101 qsort(olh + 1, olh->count, olh->objsize, natname_cmp); in nat_foreach()
1103 cfg = (struct nat44_cfg_nat*)(olh + 1); in nat_foreach()
1104 for (i = 0; i < olh->count; i++) { in nat_foreach()
1105 (void)f(cfg, arg); /* Ignore errors for now */ in nat_foreach()
1106 cfg = (struct nat44_cfg_nat *)((caddr_t)cfg + in nat_foreach()
1107 olh->objsize); in nat_foreach()
1121 struct nat44_cfg_nat *cfg; in nat_get_cmd() local
1125 sz = sizeof(*oh) + sizeof(*cfg) + 128; in nat_get_cmd()
1130 cfg = (struct nat44_cfg_nat *)(oh + 1); in nat_get_cmd()
1131 oh->ntlv.head.length = sizeof(oh->ntlv); in nat_get_cmd()
1132 strlcpy(oh->ntlv.name, name, sizeof(oh->ntlv.name)); in nat_get_cmd()
1133 strlcpy(cfg->name, name, sizeof(cfg->name)); in nat_get_cmd()
1135 if (do_get3(cmd, &oh->opheader, &sz) != 0) { in nat_get_cmd()
1136 sz = cfg->size; in nat_get_cmd()
1158 ac--; in ipfw_show_nat()
1167 for ( ; ac != 0; ac--, av++) { in ipfw_show_nat()