| #ifndef __UTILS_XFRM_H__ |
| #define __UTILS_XFRM_H__ 1 |
| #include <string.h> |
| #include <asm/types.h> |
| #include <linux/netlink.h> |
| #include <linux/rtnetlink.h> |
| #include <linux/if_link.h> |
| #include <linux/if_addr.h> |
| #include <linux/neighbour.h> |
| #include <cutils/properties.h> |
| #include <asm/types.h> |
| #include <stdlib.h> |
| #include <arpa/inet.h> |
| #include <linux/xfrm.h> |
| |
| |
| //#define NLMSG_DELETEALL_BUF_SIZE (4096-512) |
| #define NLMSG_DELETEALL_BUF_SIZE 8192 |
| |
| /* |
| * Receiving buffer defines: |
| * nlmsg |
| * data = struct xfrm_userpolicy_info |
| * rtattr |
| * data = struct xfrm_user_tmpl[] |
| */ |
| #define NLMSG_BUF_SIZE 4096 |
| #define RTA_BUF_SIZE 2048 |
| #define XFRM_TMPLS_BUF_SIZE 1024 |
| #define CTX_BUF_SIZE 256 |
| #define XFRM_ALGO_KEY_BUF_SIZE 512 |
| |
| #undef NLMSG_TAIL |
| #define NLMSG_TAIL(nmsg) \ |
| ((struct rtattr *) (((char *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))) |
| |
| #define XFRM_POLICY_ERROR 255 |
| enum PROTOCOL_TYPE{ |
| PROTOCOL_ICMP=1, |
| PROTOCOL_IPV4=4, |
| PROTOCOL_TCP=6, |
| PROTOCOL_UDP=17, |
| PROTOCOL_IPV6=41, |
| PROTOCOL_GRE=47, |
| PROTOCOL_ESP=50, |
| PROTOCOL_AH=51, |
| PROTOCOL_ICMPV6=58, |
| PROTOCOL_IPCOMP=108, |
| PROTOCOL_L2TP=115 |
| }; |
| |
| struct rtnl_handle_xfrm |
| { |
| int fd; |
| struct sockaddr_nl local; |
| struct sockaddr_nl peer; |
| __u32 seq; |
| __u32 dump; |
| }; |
| |
| struct req_handle_xfrm { |
| struct nlmsghdr n; |
| struct xfrm_userpolicy_info xpinfo; |
| char buf[RTA_BUF_SIZE]; |
| } ; |
| |
| typedef struct |
| { |
| __u8 family; |
| __u8 bytelen; |
| __s16 bitlen; |
| __u32 flags; |
| __u32 data[8]; |
| } inet_prefix; |
| |
| #define PREFIXLEN_SPECIFIED 1 |
| |
| static inline __u32 nl_mgrp_xfrm(__u32 group) |
| { |
| if (group > 31 ) { |
| //ALOGD("Use setsockopt for this group %d\n", group); |
| return -1; |
| } |
| return group ? (1 << (group - 1)) : 0; |
| } |
| |
| |
| extern int mask2bits(__u32 netmask_xfrm); |
| extern int get_netmask(unsigned *val_xfrm, const char *arg_xfrm, int base_xfrm); |
| extern int get_unsigned(unsigned *val_xfrm, const char *arg_xfrm, int base_xfrm); |
| extern int get_u32(__u32 *val_xfrm, const char *arg_xfrm, int base_xfrm); |
| extern int get_u8(__u8 *val_xfrm, const char *arg_xfrm, int base_xfrm); |
| extern int get_addr_ipv4(__u8 *ap_xfrm, const char *cp_xfrm); |
| extern int get_addr_1(inet_prefix *addr_xfrm, const char *name_xfrm, int family); |
| extern int get_prefix(inet_prefix *dst_xfrm, char *arg_xfrm, int family); |
| |
| |
| |
| typedef int (*rtnl_filter_t_xfrm)(struct rtnl_handle_xfrm * rth,struct nlmsghdr *n); |
| |
| extern int xfrm_policy_process_delete_exist( struct rtnl_handle_xfrm * rth,struct nlmsghdr *n, pid_t volte_pid); |
| extern int xfrm_state_process_delete_exist( struct rtnl_handle_xfrm * rth,struct nlmsghdr *n, pid_t volte_pid); |
| |
| extern void rtnl_close_xfrm(struct rtnl_handle_xfrm *rth); |
| extern int rtnl_open_byproto_xfrm(struct rtnl_handle_xfrm *rth, unsigned subscriptions, |
| int protocol); |
| extern int rtnl_listen_xfrm(struct rtnl_handle_xfrm *rtnl, rtnl_filter_t_xfrm handler); |
| extern int rtnl_accept_msg_xfrm(struct rtnl_handle_xfrm * rth,struct nlmsghdr *n); |
| #endif /* __UTILS_XFRM_H__ */ |