Пример #1
0
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);
	}

}
Пример #2
0
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;
}