void dump_ipsec_sp(struct ipsec_sp *policy) { char buf[BUFSIZE]; if (!policy) { SPD_DEBUG("policy is null\n"); return; } memset(buf, 0, BUFSIZE); sockaddrtoa((struct sockaddr*)&policy->selector.src, buf, BUFSIZE); pr_info("spd.selector.src=%s/%u\n", buf, policy->selector.prefixlen_s); memset(buf, 0, BUFSIZE); sockaddrtoa((struct sockaddr*)&policy->selector.dst, buf, BUFSIZE); pr_info("spd.selector.dst=%s/%u\n", buf, policy->selector.prefixlen_d); if (policy->auth_sa_idx){ memset(buf, 0, BUFSIZE); sockaddrtoa((struct sockaddr*)&policy->auth_sa_idx->dst, buf, BUFSIZE); pr_info("spd.ah.dst=%s ", buf); pr_info("spd.ah.ipsec_proto=%u ", policy->auth_sa_idx->ipsec_proto); pr_info("spd.ah.spi=%u ", policy->auth_sa_idx->spi); pr_info("spd.ah.sa=%p\n", policy->auth_sa_idx->sa); } if (policy->esp_sa_idx){ memset(buf, 0, BUFSIZE); sockaddrtoa((struct sockaddr*)&policy->esp_sa_idx->dst, buf, BUFSIZE); pr_info("spd.esp.dst=%s ", buf); pr_info("spd.esp.ipsec_proto=%u ", policy->esp_sa_idx->ipsec_proto); pr_info("spd.esp.spi=%u ", policy->esp_sa_idx->spi); pr_info("spd.esp.sa=%p\n", policy->esp_sa_idx->sa); } if (policy->comp_sa_idx){ memset(buf, 0, BUFSIZE); sockaddrtoa((struct sockaddr*)&policy->comp_sa_idx->dst, buf, BUFSIZE); pr_info("spd.comp.dst=%s ", buf); pr_info("spd.comp.ipsec_proto=%u ", policy->comp_sa_idx->ipsec_proto); pr_info("spd.comp.spi=%u ", policy->comp_sa_idx->spi); pr_info("spd.comp.sa=%p\n", policy->comp_sa_idx->sa); } }
int sadb_address_to_sockaddr(const struct sadb_address *ext_msg, struct sockaddr* addr) { int error = 0, len = 0; struct sockaddr* tmp_addr = NULL; #ifdef CONFIG_IPSEC_DEBUG char buf[BUF_SIZE]; #endif if ( !(ext_msg&&addr) ) { PFKEY_DEBUG("msg or addr is null\n"); error = -EINVAL; goto err; } len = ext_msg->sadb_address_len - sizeof(struct sadb_address); if (len < sizeof(struct sockaddr)) { PFKEY_DEBUG("sadb_address_len is small len=%d\n", len); error = -EINVAL; goto err; } tmp_addr = (struct sockaddr*)((char*)ext_msg + sizeof(struct sadb_address)); if (!tmp_addr) { PFKEY_DEBUG("address==null\n"); error = -EINVAL; goto err; } switch (tmp_addr->sa_family) { case AF_INET: #ifdef CONFIG_IPSEC_DEBUG PFKEY_DEBUG("address family is AF_INET\n"); sockaddrtoa((struct sockaddr*)tmp_addr, buf, BUF_SIZE); PFKEY_DEBUG("address=%s\n", buf); #endif memcpy(addr, tmp_addr, sizeof(struct sockaddr_in)); break; case AF_INET6: #ifdef CONFIG_IPSEC_DEBUG PFKEY_DEBUG("address family is AF_INET6\n"); sockaddrtoa((struct sockaddr*)tmp_addr, buf, BUF_SIZE); PFKEY_DEBUG("address=%s\n", buf); #endif memcpy(addr, tmp_addr, sizeof(struct sockaddr_in6)); break; default: PFKEY_DEBUG("address family is unknown\n"); error = -EINVAL; goto err; } err: #ifdef CONFIG_IPSEC_DEBUG if (!error) PFKEY_DEBUG("error=%d\n", error); #endif return error; }