1c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger/* $USAGI: $ */
2c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
3c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger/*
4c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * Copyright (C)2004 USAGI/WIDE Project
5ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger *
6c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * This program is free software; you can redistribute it and/or modify
7c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * it under the terms of the GNU General Public License as published by
8c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * the Free Software Foundation; either version 2 of the License, or
9c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * (at your option) any later version.
10ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger *
11c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * This program is distributed in the hope that it will be useful,
12c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * but WITHOUT ANY WARRANTY; without even the implied warranty of
13c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * GNU General Public License for more details.
15ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger *
16c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * You should have received a copy of the GNU General Public License
17c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * along with this program; if not, write to the Free Software
18c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger */
20c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger/*
21c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * Authors:
22c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger *	Masahide NAKAMURA @USAGI
23c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger */
24c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
25c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#ifndef __XFRM_H__
26c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define __XFRM_H__ 1
27c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
28c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#include <stdio.h>
29c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#include <sys/socket.h>
30c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#include <linux/xfrm.h>
3163d91b4fda9cfb3f2f0a9dd0f1ce409850452ddcosdl.net!shemminger
3263d91b4fda9cfb3f2f0a9dd0f1ce409850452ddcosdl.net!shemminger#ifndef IPPROTO_SCTP
3363d91b4fda9cfb3f2f0a9dd0f1ce409850452ddcosdl.net!shemminger# define IPPROTO_SCTP	132
3463d91b4fda9cfb3f2f0a9dd0f1ce409850452ddcosdl.net!shemminger#endif
35c1cdf2d2148ddeff9c622bdcc0671ffe002b7cd8Stephen Hemminger#ifndef IPPROTO_DCCP
3627356a5e000effe0060940c767547dd95235795cshemminger# define IPPROTO_DCCP	33
3727356a5e000effe0060940c767547dd95235795cshemminger#endif
380bf0fbc47e33cc968c1c1d20d938de31e497c753Masahide NAKAMURA#ifndef IPPROTO_MH
390bf0fbc47e33cc968c1c1d20d938de31e497c753Masahide NAKAMURA# define IPPROTO_MH	135
400bf0fbc47e33cc968c1c1d20d938de31e497c753Masahide NAKAMURA#endif
41c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
42c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define XFRMS_RTA(x)  ((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_usersa_info))))
43c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define XFRMS_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct xfrm_usersa_info))
44c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
45c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define XFRMP_RTA(x)  ((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_userpolicy_info))))
46c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define XFRMP_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct xfrm_userpoilcy_info))
47c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
48669ae748d6ae3a476090f7dc48dd0fa6d246f77eshemminger#define XFRMSID_RTA(x)  ((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_usersa_id))))
49669ae748d6ae3a476090f7dc48dd0fa6d246f77eshemminger#define XFRMSID_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct xfrm_usersa_id))
50669ae748d6ae3a476090f7dc48dd0fa6d246f77eshemminger
51669ae748d6ae3a476090f7dc48dd0fa6d246f77eshemminger#define XFRMPID_RTA(x)  ((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_userpolicy_id))))
52669ae748d6ae3a476090f7dc48dd0fa6d246f77eshemminger#define XFRMPID_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct xfrm_userpoilcy_id))
53669ae748d6ae3a476090f7dc48dd0fa6d246f77eshemminger
5448f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv#define XFRMACQ_RTA(x)	((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_user_acquire))))
5548f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv#define XFRMEXP_RTA(x)	((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_user_expire))))
5648f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv#define XFRMPEXP_RTA(x)	((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_user_polexpire))))
5748f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv
58c54f31eeb3a1fe35359ffa40cf7bb31c18bc75a1Masahide NAKAMURA#define XFRMREP_RTA(x)	((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_user_report))))
59c54f31eeb3a1fe35359ffa40cf7bb31c18bc75a1Masahide NAKAMURA
600bb4a4c20c9deeac26f7239d83c8747c4dfb4d89jamal#define XFRMSAPD_RTA(x)	((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(__u32))))
61eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger#define XFRM_FLAG_PRINT(fp, flags, f, s) \
62eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	do { \
63eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger		if (flags & f) { \
64eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger			flags &= ~f; \
65eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger			fprintf(fp, s "%s", (flags ? " " : "")); \
66eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger		} \
67eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	} while(0)
68eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger
69c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerstruct xfrm_buffer {
70c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	char *buf;
71c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	int size;
72c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	int offset;
73c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
74c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	int nlmsg_count;
75c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	struct rtnl_handle *rth;
76c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger};
77c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
78c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerstruct xfrm_filter {
79c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	int use;
80c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
81c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	struct xfrm_usersa_info xsinfo;
82eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 id_src_mask;
83eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 id_dst_mask;
84eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 id_proto_mask;
85c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	__u32 id_spi_mask;
86eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 mode_mask;
87c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	__u32 reqid_mask;
88eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 state_flags_mask;
89c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
90c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	struct xfrm_userpolicy_info xpinfo;
91eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 dir_mask;
92eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 sel_src_mask;
93eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 sel_dst_mask;
94c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	__u32 sel_dev_mask;
95eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 upspec_proto_mask;
96eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u16 upspec_sport_mask;
97eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u16 upspec_dport_mask;
98c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	__u32 index_mask;
99eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger	__u8 action_mask;
100c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger	__u32 priority_mask;
101c1fa2253241f3cddac3519700549f98d7840b864Masahide NAKAMURA	__u8 policy_flags_mask;
102972938e9e685156b97413d17ad8993de61fdd1b9Masahide NAKAMURA
103972938e9e685156b97413d17ad8993de61fdd1b9Masahide NAKAMURA	__u8 ptype;
104972938e9e685156b97413d17ad8993de61fdd1b9Masahide NAKAMURA	__u8 ptype_mask;
105972938e9e685156b97413d17ad8993de61fdd1b9Masahide NAKAMURA
106c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger};
107eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger#define XFRM_FILTER_MASK_FULL (~0)
108c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
109c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerextern struct xfrm_filter filter;
110c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
11148f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipvint xfrm_state_print(const struct sockaddr_nl *who, struct nlmsghdr *n,
11248f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv		     void *arg);
11348f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipvint xfrm_policy_print(const struct sockaddr_nl *who, struct nlmsghdr *n,
11448f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv		      void *arg);
115c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerint do_xfrm_state(int argc, char **argv);
116c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerint do_xfrm_policy(int argc, char **argv);
11748f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipvint do_xfrm_monitor(int argc, char **argv);
118c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
119eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemmingerint xfrm_addr_match(xfrm_address_t *x1, xfrm_address_t *x2, int bits);
1207ea4f5d33d27b23a3127b0b6ec46d0b4821d9431Masahide NAKAMURAint xfrm_xfrmproto_is_ipsec(__u8 proto);
1217ea4f5d33d27b23a3127b0b6ec46d0b4821d9431Masahide NAKAMURAint xfrm_xfrmproto_is_ro(__u8 proto);
12229aa4dd76c0c1877d50b2d643eb081d5477ceadforg[shemminger]!nakamint xfrm_xfrmproto_getbyname(char *name);
1237809c61688c4a30799a07c727616887e5c885ab8net[shemminger]!shemmingerint xfrm_algotype_getbyname(char *name);
124f6fd52e626d7897e9df03331dbeb149beacb53baJamal Hadi Salimint xfrm_parse_mark(struct xfrm_mark *mark, int *argcp, char ***argvp);
12529aa4dd76c0c1877d50b2d643eb081d5477ceadforg[shemminger]!nakamconst char *strxf_xfrmproto(__u8 proto);
1267809c61688c4a30799a07c727616887e5c885ab8net[shemminger]!shemmingerconst char *strxf_algotype(int type);
127eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemmingerconst char *strxf_mask8(__u8 mask);
128eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemmingerconst char *strxf_mask32(__u32 mask);
129c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerconst char *strxf_share(__u8 share);
13030ff5089c4189e7ce0b462b16045dca04aba1765net[shemminger]!shemmingerconst char *strxf_proto(__u8 proto);
131efe69c1b7220e6c89bc5ccbeceeadf7c9e09768bMasahide NAKAMURAconst char *strxf_ptype(__u8 ptype);
132c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingervoid xfrm_id_info_print(xfrm_address_t *saddr, struct xfrm_id *id,
133eaa34ee35d6b801cabb96aafce2ca410e3f5b31dnet[shemminger]!shemminger			__u8 mode, __u32 reqid, __u16 family, int force_spi,
13448f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv			FILE *fp, const char *prefix, const char *title);
135c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingervoid xfrm_stats_print(struct xfrm_stats *s, FILE *fp, const char *prefix);
136c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingervoid xfrm_lifetime_print(struct xfrm_lifetime_cfg *cfg,
137c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger			 struct xfrm_lifetime_cur *cur,
138c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger			 FILE *fp, const char *prefix);
139c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingervoid xfrm_selector_print(struct xfrm_selector *sel, __u16 family,
140c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger			 FILE *fp, const char *prefix);
14143d9d2de044dbba5ebc2903dc66e89ee8ee0a20bstruct rtattr *tb[], __uvoid xfrm_xfrma_print(struct rtattr *tb[], __u16 family,
142c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger		      FILE *fp, const char *prefix);
14348f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipvvoid xfrm_state_info_print(struct xfrm_usersa_info *xsinfo,
14448f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv			    struct rtattr *tb[], FILE *fp, const char *prefix,
14548f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv			   const char *title);
14648f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipvvoid xfrm_policy_info_print(struct xfrm_userpolicy_info *xpinfo,
14748f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv			    struct rtattr *tb[], FILE *fp, const char *prefix,
14848f1ef9f1558735b27c8e4b910b6a0ab9b6019adlinux-ipv			    const char *title);
149c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerint xfrm_id_parse(xfrm_address_t *saddr, struct xfrm_id *id, __u16 *family,
1507809c61688c4a30799a07c727616887e5c885ab8net[shemminger]!shemminger		  int loose, int *argcp, char ***argvp);
151c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerint xfrm_mode_parse(__u8 *mode, int *argcp, char ***argvp);
1525cf576d928c515ce8dea2500154a291477ce38baosdl.net!shemmingerint xfrm_encap_type_parse(__u16 *type, int *argcp, char ***argvp);
153c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerint xfrm_reqid_parse(__u32 *reqid, int *argcp, char ***argvp);
154c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerint xfrm_selector_parse(struct xfrm_selector *sel, int *argcp, char ***argvp);
155c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerint xfrm_lifetime_cfg_parse(struct xfrm_lifetime_cfg *lft,
156c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger			    int *argcp, char ***argvp);
1572c319e1ab7ebd371c0230f549890ae6c8ba49c8eJoy Lattenint xfrm_sctx_parse(char *ctxstr, char *context,
1582c319e1ab7ebd371c0230f549890ae6c8ba49c8eJoy Latten		    struct xfrm_user_sec_ctx *sctx);
159c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#endif
160