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