|
|
| version 1.12, 2022/08/23 14:34:42 | version 1.13, 2022/08/26 14:47:36 |
|---|---|
| Line 220 fwsync_destroy(struct ip_fw_chain *ch, ip_fw3_opheader | Line 220 fwsync_destroy(struct ip_fw_chain *ch, ip_fw3_opheader |
| fws_ctx.config ^= fws_ctx.config; | fws_ctx.config ^= fws_ctx.config; |
| memset(&fws_acct, 0, sizeof fws_acct); | |
| return 0; | return 0; |
| } | } |
| Line 264 fwsync_get_cfg(struct ip_fw_chain *ch, ip_fw3_opheader | Line 266 fwsync_get_cfg(struct ip_fw_chain *ch, ip_fw3_opheader |
| int | int |
| fwsync_list(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd) | fwsync_list(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd) |
| { | { |
| ipfw_obj_header *oh; | |
| struct ipfw_sync_cfg *ucfg; | |
| size_t sz; | |
| DTRACE(); | DTRACE(); |
| sz = sizeof(*oh) + sizeof(*ucfg); | |
| /* Check minimum header size */ | |
| if (sd->valsize < sz) | |
| return (EINVAL); | |
| oh = (struct _ipfw_obj_header*) ipfw_get_sopt_header(sd, sz); | |
| /* Basic length checks for TLVs */ | |
| if (oh->ntlv.head.length != sizeof(oh->ntlv)) | |
| return (EINVAL); | |
| ucfg = (struct ipfw_sync_cfg*) (oh + 1); | |
| /* Check if name is properly terminated */ | |
| if (strnlen(ucfg->name, sizeof(ucfg->name)) == sizeof(ucfg->name)) | |
| return (EINVAL); | |
| ucfg->mode = 0; | |
| if (fws_cfg.cfg.edge) | |
| ucfg->mode |= CFG_SYNC_EDGE; | |
| if (fws_cfg.cfg.collector) | |
| ucfg->mode |= CFG_SYNC_COLLECTOR; | |
| ucfg->addrs = 2; | |
| memcpy(ucfg->addr[0].ip6.sin6_addr.s6_addr, &fws_acct.states[0], sizeof(uint64_t)); | |
| memcpy(ucfg->addr[0].ip6.sin6_addr.s6_addr + 8, &fws_acct.states[1], sizeof(uint64_t)); | |
| memcpy(ucfg->addr[1].ip6.sin6_addr.s6_addr, &fws_acct.aliases[0], sizeof(uint64_t)); | |
| memcpy(ucfg->addr[1].ip6.sin6_addr.s6_addr + 8, &fws_acct.aliases[1], sizeof(uint64_t)); | |
| return 0; | return 0; |
| } | } |