> Hi,
> 

> I'm attaching a small testprogram which tries to install an
> XFRM_POLICY_FWD, and I confirmed with a printk that the value of 2 is
> successfully propagated to xfrm_sk_policy_insert().

test program originally missed, here it is this time.

-- 
Bazsi
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#include <linux/xfrm.h>

#define IP_XFRM_POLICY 17

int 
main()
{
  int fd;
  struct sockaddr_in s_in;
  struct xfrm_userpolicy_info xp;
  
  inet_aton("192.168.13.8", &s_in.sin_addr);
  s_in.sin_family = AF_INET;
  s_in.sin_port = htons(555);
  fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if (fd < 0)
    {
      perror("socket");
      return 1;
    }
  if (connect(fd, (struct sockaddr *) &s_in, sizeof(s_in)) < 0)
    {
      perror("connect");
      return 1;
    }
  
  inet_aton("192.168.13.7", (struct in_addr *) &xp.sel.saddr);
  xp.sel.prefixlen_s = 32;
  inet_aton("192.168.13.8", (struct in_addr *) &xp.sel.daddr);
  xp.sel.prefixlen_d = 32;
  xp.sel.dport = 0;
  xp.sel.dport_mask = 0;
  xp.sel.sport = 0;
  xp.sel.sport_mask = 0;
  xp.sel.family = AF_INET;
  xp.sel.proto = 0;
  xp.sel.ifindex = 0;
  xp.sel.user = 0;
  xp.lft.soft_byte_limit = 10000000;
  xp.lft.hard_byte_limit = 10000000;
  xp.lft.soft_packet_limit = 10000000;
  xp.lft.hard_packet_limit = 10000000;
  xp.lft.soft_add_expires_seconds = 3600;
  xp.lft.hard_add_expires_seconds = 3600;
  xp.lft.soft_use_expires_seconds = 3600;
  xp.lft.hard_use_expires_seconds = 3600;
  xp.curlft.bytes = 0;
  xp.curlft.packets = 0;
  xp.curlft.add_time = 0;
  xp.curlft.use_time = 0;
  xp.priority = 0;
  xp.index = 0;
  xp.dir = XFRM_POLICY_FWD;
  xp.action = XFRM_POLICY_ALLOW;
  xp.flags = 0;
  xp.share = XFRM_SHARE_UNIQUE;
  
  if (setsockopt(fd, SOL_IP, IP_XFRM_POLICY, &xp, sizeof(xp)) < 0)
    {
      perror("setsockopt(IP_XFRM_POLICY)");
      return 1;
    }
  
  send(fd, "abrakadabra", 11, 0);
  close(fd);
}

Reply via email to