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; |
} |
} |