Lines Matching full:cfg

70 static void nptv6_free_config(struct nptv6_cfg *cfg);
73 static int nptv6_rewrite_internal(struct nptv6_cfg *cfg, struct mbuf **mp,
75 static int nptv6_rewrite_external(struct nptv6_cfg *cfg, struct mbuf **mp,
111 nptv6_getlasthdr(struct nptv6_cfg *cfg, struct mbuf *m, int *offset) in nptv6_getlasthdr() argument
137 nptv6_translate_icmpv6(struct nptv6_cfg *cfg, struct mbuf **mp, int offset) in nptv6_translate_icmpv6() argument
179 &cfg->external, &cfg->mask)) in nptv6_translate_icmpv6()
180 return (nptv6_rewrite_external(cfg, mp, offset)); in nptv6_translate_icmpv6()
182 &cfg->internal, &cfg->mask)) in nptv6_translate_icmpv6()
183 return (nptv6_rewrite_internal(cfg, mp, offset)); in nptv6_translate_icmpv6()
192 nptv6_search_index(struct nptv6_cfg *cfg, struct in6_addr *a) in nptv6_search_index() argument
196 if (cfg->flags & NPTV6_48PLEN) in nptv6_search_index()
228 nptv6_rewrite_internal(struct nptv6_cfg *cfg, struct mbuf **mp, int offset) in nptv6_rewrite_internal() argument
251 idx = nptv6_search_index(cfg, addr); in nptv6_rewrite_internal()
266 nptv6_copy_addr(&cfg->external, addr, &cfg->mask); in nptv6_rewrite_internal()
267 adj = cksum_add(adj, cfg->adjustment); in nptv6_rewrite_internal()
276 proto = nptv6_getlasthdr(cfg, *mp, &offset); in nptv6_rewrite_internal()
278 nptv6_translate_icmpv6(cfg, mp, offset) != 0)) in nptv6_rewrite_internal()
280 NPTV6STAT_INC(cfg, in2ex); in nptv6_rewrite_internal()
286 nptv6_rewrite_external(struct nptv6_cfg *cfg, struct mbuf **mp, int offset) in nptv6_rewrite_external() argument
309 idx = nptv6_search_index(cfg, addr); in nptv6_rewrite_external()
324 nptv6_copy_addr(&cfg->internal, addr, &cfg->mask); in nptv6_rewrite_external()
325 adj = cksum_add(adj, ~cfg->adjustment); in nptv6_rewrite_external()
334 proto = nptv6_getlasthdr(cfg, *mp, &offset); in nptv6_rewrite_external()
336 nptv6_translate_icmpv6(cfg, mp, offset) != 0)) in nptv6_rewrite_external()
338 NPTV6STAT_INC(cfg, ex2in); in nptv6_rewrite_external()
351 struct nptv6_cfg *cfg; in ipfw_nptv6() local
361 (cfg = NPTV6_LOOKUP(chain, icmd)) == NULL || in ipfw_nptv6()
362 (cfg->flags & NPTV6_READY) == 0) in ipfw_nptv6()
382 &cfg->internal, &cfg->mask)) { in ipfw_nptv6()
388 &cfg->internal, &cfg->mask)) in ipfw_nptv6()
390 ret = nptv6_rewrite_internal(cfg, &args->m, 0); in ipfw_nptv6()
392 &cfg->external, &cfg->mask)) in ipfw_nptv6()
393 ret = nptv6_rewrite_external(cfg, &args->m, 0); in ipfw_nptv6()
404 NPTV6STAT_INC(cfg, dropped); in ipfw_nptv6()
422 struct nptv6_cfg *cfg; in nptv6_alloc_config() local
424 cfg = malloc(sizeof(struct nptv6_cfg), M_IPFW, M_WAITOK | M_ZERO); in nptv6_alloc_config()
425 COUNTER_ARRAY_ALLOC(cfg->stats, NPTV6STATS, M_WAITOK); in nptv6_alloc_config()
426 cfg->no.name = cfg->name; in nptv6_alloc_config()
427 cfg->no.etlv = IPFW_TLV_NPTV6_NAME; in nptv6_alloc_config()
428 cfg->no.set = set; in nptv6_alloc_config()
429 strlcpy(cfg->name, name, sizeof(cfg->name)); in nptv6_alloc_config()
430 return (cfg); in nptv6_alloc_config()
434 nptv6_free_config(struct nptv6_cfg *cfg) in nptv6_free_config() argument
437 COUNTER_ARRAY_FREE(cfg->stats, NPTV6STATS); in nptv6_free_config()
438 free(cfg, M_IPFW); in nptv6_free_config()
442 nptv6_export_config(struct ip_fw_chain *ch, struct nptv6_cfg *cfg, in nptv6_export_config() argument
446 uc->internal = cfg->internal; in nptv6_export_config()
447 if (cfg->flags & NPTV6_DYNAMIC_PREFIX) in nptv6_export_config()
448 memcpy(uc->if_name, cfg->if_name, IF_NAMESIZE); in nptv6_export_config()
450 uc->external = cfg->external; in nptv6_export_config()
451 uc->plen = cfg->plen; in nptv6_export_config()
452 uc->flags = cfg->flags & NPTV6_FLAGSMASK; in nptv6_export_config()
453 uc->set = cfg->no.set; in nptv6_export_config()
454 strlcpy(uc->name, cfg->no.name, sizeof(uc->name)); in nptv6_export_config()
477 struct nptv6_cfg *cfg; in nptv6_find() local
479 cfg = (struct nptv6_cfg *)ipfw_objhash_lookup_name_type(ni, set, in nptv6_find()
482 return (cfg); in nptv6_find()
486 nptv6_calculate_adjustment(struct nptv6_cfg *cfg) in nptv6_calculate_adjustment() argument
492 for (i = 0, p = (uint16_t *)&cfg->internal; in nptv6_calculate_adjustment()
493 p < (uint16_t *)(&cfg->internal + 1); p++) in nptv6_calculate_adjustment()
497 for (e = 0, p = (uint16_t *)&cfg->external; in nptv6_calculate_adjustment()
498 p < (uint16_t *)(&cfg->external + 1); p++) in nptv6_calculate_adjustment()
502 cfg->adjustment = cksum_add(~e, i); in nptv6_calculate_adjustment()
518 nptv6_set_external(struct nptv6_cfg *cfg, struct in6_addr *addr) in nptv6_set_external() argument
521 cfg->external = *addr; in nptv6_set_external()
522 IN6_MASK_ADDR(&cfg->external, &cfg->mask); in nptv6_set_external()
523 nptv6_calculate_adjustment(cfg); in nptv6_set_external()
524 cfg->flags |= NPTV6_READY; in nptv6_set_external()
532 nptv6_find_prefix(struct ip_fw_chain *ch, struct nptv6_cfg *cfg, in nptv6_find_prefix() argument
539 MPASS(cfg->flags & NPTV6_DYNAMIC_PREFIX); in nptv6_find_prefix()
543 ifp = ifunit_ref(cfg->if_name); in nptv6_find_prefix()
554 &cfg->internal, &cfg->mask)) in nptv6_find_prefix()
557 nptv6_set_external(cfg, &ia->ia_addr.sin6_addr); in nptv6_find_prefix()
576 struct nptv6_cfg *cfg; in ifaddr_cb() local
579 cfg = (struct nptv6_cfg *)SRV_OBJECT(ch, no->kidx); in ifaddr_cb()
580 if ((cfg->flags & NPTV6_DYNAMIC_PREFIX) == 0) in ifaddr_cb()
585 if (strncmp(args->ifp->if_xname, cfg->if_name, IF_NAMESIZE)) in ifaddr_cb()
588 cfg->flags &= ~NPTV6_READY; in ifaddr_cb()
593 if ((cfg->flags & NPTV6_READY) == 0) in ifaddr_cb()
596 if (IN6_ARE_MASKED_ADDR_EQUAL(&cfg->external, args->addr, in ifaddr_cb()
597 &cfg->mask) != 0) in ifaddr_cb()
600 cfg->flags &= ~NPTV6_READY; in ifaddr_cb()
603 if (cfg->flags & NPTV6_READY) in ifaddr_cb()
607 IN6_ARE_MASKED_ADDR_EQUAL(args->addr, &cfg->internal, in ifaddr_cb()
608 &cfg->mask)) in ifaddr_cb()
612 MPASS(!(cfg->flags & NPTV6_READY)); in ifaddr_cb()
615 nptv6_find_prefix(ch, cfg, args->ifp); in ifaddr_cb()
655 struct nptv6_cfg *cfg; in nptv6_create() local
682 cfg = nptv6_alloc_config(uc->name, uc->set); in nptv6_create()
683 cfg->plen = uc->plen; in nptv6_create()
684 cfg->flags = uc->flags & NPTV6_FLAGSMASK; in nptv6_create()
685 if (cfg->plen <= 48) in nptv6_create()
686 cfg->flags |= NPTV6_48PLEN; in nptv6_create()
687 cfg->mask = mask; in nptv6_create()
688 cfg->internal = uc->internal; in nptv6_create()
689 IN6_MASK_ADDR(&cfg->internal, &mask); in nptv6_create()
690 if (cfg->flags & NPTV6_DYNAMIC_PREFIX) in nptv6_create()
691 memcpy(cfg->if_name, uc->if_name, IF_NAMESIZE); in nptv6_create()
693 nptv6_set_external(cfg, &uc->external); in nptv6_create()
702 if (ipfw_objhash_alloc_idx(ni, &cfg->no.kidx) != 0) { in nptv6_create()
704 nptv6_free_config(cfg); in nptv6_create()
707 ipfw_objhash_add(ni, &cfg->no); in nptv6_create()
708 SRV_OBJECT(ch, cfg->no.kidx) = cfg; in nptv6_create()
709 if (cfg->flags & NPTV6_DYNAMIC_PREFIX) in nptv6_create()
710 nptv6_find_prefix(ch, cfg, NULL); in nptv6_create()
728 struct nptv6_cfg *cfg; in nptv6_destroy() local
738 cfg = nptv6_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set); in nptv6_destroy()
739 if (cfg == NULL) { in nptv6_destroy()
743 if (cfg->no.refcnt > 0) { in nptv6_destroy()
748 ipfw_reset_eaction_instance(ch, V_nptv6_eid, cfg->no.kidx); in nptv6_destroy()
749 SRV_OBJECT(ch, cfg->no.kidx) = NULL; in nptv6_destroy()
750 ipfw_objhash_del(CHAIN_TO_SRV(ch), &cfg->no); in nptv6_destroy()
751 ipfw_objhash_free_idx(CHAIN_TO_SRV(ch), cfg->no.kidx); in nptv6_destroy()
754 nptv6_free_config(cfg); in nptv6_destroy()
814 export_stats(struct ip_fw_chain *ch, struct nptv6_cfg *cfg, in export_stats() argument
818 __COPY_STAT_FIELD(cfg, stats, in2ex); in export_stats()
819 __COPY_STAT_FIELD(cfg, stats, ex2in); in export_stats()
820 __COPY_STAT_FIELD(cfg, stats, dropped); in export_stats()
836 struct nptv6_cfg *cfg; in nptv6_stats() local
855 cfg = nptv6_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set); in nptv6_stats()
856 if (cfg == NULL) { in nptv6_stats()
860 export_stats(ch, cfg, &stats); in nptv6_stats()
885 struct nptv6_cfg *cfg; in nptv6_reset_stats() local
896 cfg = nptv6_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set); in nptv6_reset_stats()
897 if (cfg == NULL) { in nptv6_reset_stats()
901 COUNTER_ARRAY_ZERO(cfg->stats, NPTV6STATS); in nptv6_reset_stats()
993 struct nptv6_cfg *cfg; in destroy_config_cb() local
999 cfg = (struct nptv6_cfg *)SRV_OBJECT(ch, no->kidx); in destroy_config_cb()
1001 ipfw_objhash_del(ni, &cfg->no); in destroy_config_cb()
1002 ipfw_objhash_free_idx(ni, cfg->no.kidx); in destroy_config_cb()
1003 nptv6_free_config(cfg); in destroy_config_cb()