MCPcopy Create free account
hub / github.com/F-Stack/f-stack / nptv6_create

Function nptv6_create

tools/ipfw/nptv6.c:193–284  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

191#define NPTV6_HAS_EXTPREFIX 0x02
192#define NPTV6_HAS_PREFIXLEN 0x04
193static void
194nptv6_create(const char *name, uint8_t set, int ac, char *av[])
195{
196 char buf[sizeof(ipfw_obj_lheader) + sizeof(ipfw_nptv6_cfg)];
197 struct in6_addr mask;
198 ipfw_nptv6_cfg *cfg;
199 ipfw_obj_lheader *olh;
200 int tcmd, flags, plen;
201 char *p;
202
203 plen = 0;
204 memset(buf, 0, sizeof(buf));
205 olh = (ipfw_obj_lheader *)buf;
206 cfg = (ipfw_nptv6_cfg *)(olh + 1);
207 cfg->set = set;
208 flags = 0;
209 while (ac > 0) {
210 tcmd = get_token(nptv6newcmds, *av, "option");
211 ac--; av++;
212
213 switch (tcmd) {
214 case TOK_INTPREFIX:
215 NEED1("IPv6 prefix required");
216 nptv6_parse_prefix(*av, &cfg->internal, &plen);
217 flags |= NPTV6_HAS_INTPREFIX;
218 if (plen > 0)
219 goto check_prefix;
220 ac--; av++;
221 break;
222 case TOK_EXTPREFIX:
223 if (flags & NPTV6_HAS_EXTPREFIX)
224 errx(EX_USAGE,
225 "Only one ext_prefix or ext_if allowed");
226 NEED1("IPv6 prefix required");
227 nptv6_parse_prefix(*av, &cfg->external, &plen);
228 flags |= NPTV6_HAS_EXTPREFIX;
229 if (plen > 0)
230 goto check_prefix;
231 ac--; av++;
232 break;
233 case TOK_EXTIF:
234 if (flags & NPTV6_HAS_EXTPREFIX)
235 errx(EX_USAGE,
236 "Only one ext_prefix or ext_if allowed");
237 NEED1("Interface name required");
238 if (strlen(*av) >= sizeof(cfg->if_name))
239 errx(EX_USAGE, "Invalid interface name");
240 flags |= NPTV6_HAS_EXTPREFIX;
241 cfg->flags |= NPTV6_DYNAMIC_PREFIX;
242 strncpy(cfg->if_name, *av, sizeof(cfg->if_name));
243 ac--; av++;
244 break;
245 case TOK_PREFIXLEN:
246 NEED1("IPv6 prefix length required");
247 plen = strtol(*av, &p, 10);
248check_prefix:
249 if (*p != '\0' || plen < 8 || plen > 64)
250 errx(EX_USAGE, "wrong prefix length: %s", *av);

Callers 1

ipfw_nptv6_handlerFunction · 0.70

Calls 8

memsetFunction · 0.85
nptv6_parse_prefixFunction · 0.85
strncpyFunction · 0.85
strtolFunction · 0.85
n2maskFunction · 0.85
do_set3Function · 0.85
get_tokenFunction · 0.70
strlcpyFunction · 0.50

Tested by

no test coverage detected