1*30dc5e63STatyana Nikolova /* 2*30dc5e63STatyana Nikolova * Copyright (c) 2014 Intel Corporation. All rights reserved. 3*30dc5e63STatyana Nikolova * Copyright (c) 2014 Chelsio, Inc. All rights reserved. 4*30dc5e63STatyana Nikolova * 5*30dc5e63STatyana Nikolova * This software is available to you under a choice of one of two 6*30dc5e63STatyana Nikolova * licenses. You may choose to be licensed under the terms of the GNU 7*30dc5e63STatyana Nikolova * General Public License (GPL) Version 2, available from the file 8*30dc5e63STatyana Nikolova * COPYING in the main directory of this source tree, or the 9*30dc5e63STatyana Nikolova * OpenIB.org BSD license below: 10*30dc5e63STatyana Nikolova * 11*30dc5e63STatyana Nikolova * Redistribution and use in source and binary forms, with or 12*30dc5e63STatyana Nikolova * without modification, are permitted provided that the following 13*30dc5e63STatyana Nikolova * conditions are met: 14*30dc5e63STatyana Nikolova * 15*30dc5e63STatyana Nikolova * - Redistributions of source code must retain the above 16*30dc5e63STatyana Nikolova * copyright notice, this list of conditions and the following 17*30dc5e63STatyana Nikolova * disclaimer. 18*30dc5e63STatyana Nikolova * 19*30dc5e63STatyana Nikolova * - Redistributions in binary form must reproduce the above 20*30dc5e63STatyana Nikolova * copyright notice, this list of conditions and the following 21*30dc5e63STatyana Nikolova * disclaimer in the documentation and/or other materials 22*30dc5e63STatyana Nikolova * provided with the distribution. 23*30dc5e63STatyana Nikolova * 24*30dc5e63STatyana Nikolova * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25*30dc5e63STatyana Nikolova * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26*30dc5e63STatyana Nikolova * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27*30dc5e63STatyana Nikolova * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 28*30dc5e63STatyana Nikolova * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 29*30dc5e63STatyana Nikolova * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 30*30dc5e63STatyana Nikolova * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 31*30dc5e63STatyana Nikolova * SOFTWARE. 32*30dc5e63STatyana Nikolova */ 33*30dc5e63STatyana Nikolova #ifndef _IW_PORTMAP_H 34*30dc5e63STatyana Nikolova #define _IW_PORTMAP_H 35*30dc5e63STatyana Nikolova 36*30dc5e63STatyana Nikolova #define IWPM_ULIBNAME_SIZE 32 37*30dc5e63STatyana Nikolova #define IWPM_DEVNAME_SIZE 32 38*30dc5e63STatyana Nikolova #define IWPM_IFNAME_SIZE 16 39*30dc5e63STatyana Nikolova #define IWPM_IPADDR_SIZE 16 40*30dc5e63STatyana Nikolova 41*30dc5e63STatyana Nikolova enum { 42*30dc5e63STatyana Nikolova IWPM_INVALID_NLMSG_ERR = 10, 43*30dc5e63STatyana Nikolova IWPM_CREATE_MAPPING_ERR, 44*30dc5e63STatyana Nikolova IWPM_DUPLICATE_MAPPING_ERR, 45*30dc5e63STatyana Nikolova IWPM_UNKNOWN_MAPPING_ERR, 46*30dc5e63STatyana Nikolova IWPM_CLIENT_DEV_INFO_ERR, 47*30dc5e63STatyana Nikolova IWPM_USER_LIB_INFO_ERR, 48*30dc5e63STatyana Nikolova IWPM_REMOTE_QUERY_REJECT 49*30dc5e63STatyana Nikolova }; 50*30dc5e63STatyana Nikolova 51*30dc5e63STatyana Nikolova struct iwpm_dev_data { 52*30dc5e63STatyana Nikolova char dev_name[IWPM_DEVNAME_SIZE]; 53*30dc5e63STatyana Nikolova char if_name[IWPM_IFNAME_SIZE]; 54*30dc5e63STatyana Nikolova }; 55*30dc5e63STatyana Nikolova 56*30dc5e63STatyana Nikolova struct iwpm_sa_data { 57*30dc5e63STatyana Nikolova struct sockaddr_storage loc_addr; 58*30dc5e63STatyana Nikolova struct sockaddr_storage mapped_loc_addr; 59*30dc5e63STatyana Nikolova struct sockaddr_storage rem_addr; 60*30dc5e63STatyana Nikolova struct sockaddr_storage mapped_rem_addr; 61*30dc5e63STatyana Nikolova }; 62*30dc5e63STatyana Nikolova 63*30dc5e63STatyana Nikolova /** 64*30dc5e63STatyana Nikolova * iwpm_init - Allocate resources for the iwarp port mapper 65*30dc5e63STatyana Nikolova * 66*30dc5e63STatyana Nikolova * Should be called when network interface goes up. 67*30dc5e63STatyana Nikolova */ 68*30dc5e63STatyana Nikolova int iwpm_init(u8); 69*30dc5e63STatyana Nikolova 70*30dc5e63STatyana Nikolova /** 71*30dc5e63STatyana Nikolova * iwpm_exit - Deallocate resources for the iwarp port mapper 72*30dc5e63STatyana Nikolova * 73*30dc5e63STatyana Nikolova * Should be called when network interface goes down. 74*30dc5e63STatyana Nikolova */ 75*30dc5e63STatyana Nikolova int iwpm_exit(u8); 76*30dc5e63STatyana Nikolova 77*30dc5e63STatyana Nikolova /** 78*30dc5e63STatyana Nikolova * iwpm_valid_pid - Check if the userspace iwarp port mapper pid is valid 79*30dc5e63STatyana Nikolova * 80*30dc5e63STatyana Nikolova * Returns true if the pid is greater than zero, otherwise returns false 81*30dc5e63STatyana Nikolova */ 82*30dc5e63STatyana Nikolova int iwpm_valid_pid(void); 83*30dc5e63STatyana Nikolova 84*30dc5e63STatyana Nikolova /** 85*30dc5e63STatyana Nikolova * iwpm_register_pid - Send a netlink query to userspace 86*30dc5e63STatyana Nikolova * to get the iwarp port mapper pid 87*30dc5e63STatyana Nikolova * @pm_msg: Contains driver info to send to the userspace port mapper 88*30dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 89*30dc5e63STatyana Nikolova */ 90*30dc5e63STatyana Nikolova int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client); 91*30dc5e63STatyana Nikolova 92*30dc5e63STatyana Nikolova /** 93*30dc5e63STatyana Nikolova * iwpm_add_mapping - Send a netlink add mapping request to 94*30dc5e63STatyana Nikolova * the userspace port mapper 95*30dc5e63STatyana Nikolova * @pm_msg: Contains the local ip/tcp address info to send 96*30dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 97*30dc5e63STatyana Nikolova * 98*30dc5e63STatyana Nikolova * If the request is successful, the pm_msg stores 99*30dc5e63STatyana Nikolova * the port mapper response (mapped address info) 100*30dc5e63STatyana Nikolova */ 101*30dc5e63STatyana Nikolova int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client); 102*30dc5e63STatyana Nikolova 103*30dc5e63STatyana Nikolova /** 104*30dc5e63STatyana Nikolova * iwpm_add_and_query_mapping - Send a netlink add and query mapping request 105*30dc5e63STatyana Nikolova * to the userspace port mapper 106*30dc5e63STatyana Nikolova * @pm_msg: Contains the local and remote ip/tcp address info to send 107*30dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 108*30dc5e63STatyana Nikolova * 109*30dc5e63STatyana Nikolova * If the request is successful, the pm_msg stores the 110*30dc5e63STatyana Nikolova * port mapper response (mapped local and remote address info) 111*30dc5e63STatyana Nikolova */ 112*30dc5e63STatyana Nikolova int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client); 113*30dc5e63STatyana Nikolova 114*30dc5e63STatyana Nikolova /** 115*30dc5e63STatyana Nikolova * iwpm_remove_mapping - Send a netlink remove mapping request 116*30dc5e63STatyana Nikolova * to the userspace port mapper 117*30dc5e63STatyana Nikolova * 118*30dc5e63STatyana Nikolova * @local_addr: Local ip/tcp address to remove 119*30dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 120*30dc5e63STatyana Nikolova */ 121*30dc5e63STatyana Nikolova int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client); 122*30dc5e63STatyana Nikolova 123*30dc5e63STatyana Nikolova /** 124*30dc5e63STatyana Nikolova * iwpm_register_pid_cb - Process the port mapper response to 125*30dc5e63STatyana Nikolova * iwpm_register_pid query 126*30dc5e63STatyana Nikolova * @skb: 127*30dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 128*30dc5e63STatyana Nikolova * 129*30dc5e63STatyana Nikolova * If successful, the function receives the userspace port mapper pid 130*30dc5e63STatyana Nikolova * which is used in future communication with the port mapper 131*30dc5e63STatyana Nikolova */ 132*30dc5e63STatyana Nikolova int iwpm_register_pid_cb(struct sk_buff *, struct netlink_callback *); 133*30dc5e63STatyana Nikolova 134*30dc5e63STatyana Nikolova /** 135*30dc5e63STatyana Nikolova * iwpm_add_mapping_cb - Process the port mapper response to 136*30dc5e63STatyana Nikolova * iwpm_add_mapping request 137*30dc5e63STatyana Nikolova * @skb: 138*30dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 139*30dc5e63STatyana Nikolova */ 140*30dc5e63STatyana Nikolova int iwpm_add_mapping_cb(struct sk_buff *, struct netlink_callback *); 141*30dc5e63STatyana Nikolova 142*30dc5e63STatyana Nikolova /** 143*30dc5e63STatyana Nikolova * iwpm_add_and_query_mapping_cb - Process the port mapper response to 144*30dc5e63STatyana Nikolova * iwpm_add_and_query_mapping request 145*30dc5e63STatyana Nikolova * @skb: 146*30dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 147*30dc5e63STatyana Nikolova */ 148*30dc5e63STatyana Nikolova int iwpm_add_and_query_mapping_cb(struct sk_buff *, struct netlink_callback *); 149*30dc5e63STatyana Nikolova 150*30dc5e63STatyana Nikolova /** 151*30dc5e63STatyana Nikolova * iwpm_mapping_error_cb - Process port mapper notification for error 152*30dc5e63STatyana Nikolova * 153*30dc5e63STatyana Nikolova * @skb: 154*30dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 155*30dc5e63STatyana Nikolova */ 156*30dc5e63STatyana Nikolova int iwpm_mapping_error_cb(struct sk_buff *, struct netlink_callback *); 157*30dc5e63STatyana Nikolova 158*30dc5e63STatyana Nikolova /** 159*30dc5e63STatyana Nikolova * iwpm_mapping_info_cb - Process a notification that the userspace 160*30dc5e63STatyana Nikolova * port mapper daemon is started 161*30dc5e63STatyana Nikolova * @skb: 162*30dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 163*30dc5e63STatyana Nikolova * 164*30dc5e63STatyana Nikolova * Using the received port mapper pid, send all the local mapping 165*30dc5e63STatyana Nikolova * info records to the userspace port mapper 166*30dc5e63STatyana Nikolova */ 167*30dc5e63STatyana Nikolova int iwpm_mapping_info_cb(struct sk_buff *, struct netlink_callback *); 168*30dc5e63STatyana Nikolova 169*30dc5e63STatyana Nikolova /** 170*30dc5e63STatyana Nikolova * iwpm_ack_mapping_info_cb - Process the port mapper ack for 171*30dc5e63STatyana Nikolova * the provided local mapping info records 172*30dc5e63STatyana Nikolova * @skb: 173*30dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 174*30dc5e63STatyana Nikolova */ 175*30dc5e63STatyana Nikolova int iwpm_ack_mapping_info_cb(struct sk_buff *, struct netlink_callback *); 176*30dc5e63STatyana Nikolova 177*30dc5e63STatyana Nikolova /** 178*30dc5e63STatyana Nikolova * iwpm_create_mapinfo - Store local and mapped IPv4/IPv6 address 179*30dc5e63STatyana Nikolova * info in a hash table 180*30dc5e63STatyana Nikolova * @local_addr: Local ip/tcp address 181*30dc5e63STatyana Nikolova * @mapped_addr: Mapped local ip/tcp address 182*30dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 183*30dc5e63STatyana Nikolova */ 184*30dc5e63STatyana Nikolova int iwpm_create_mapinfo(struct sockaddr_storage *local_addr, 185*30dc5e63STatyana Nikolova struct sockaddr_storage *mapped_addr, u8 nl_client); 186*30dc5e63STatyana Nikolova 187*30dc5e63STatyana Nikolova /** 188*30dc5e63STatyana Nikolova * iwpm_remove_mapinfo - Remove local and mapped IPv4/IPv6 address 189*30dc5e63STatyana Nikolova * info from the hash table 190*30dc5e63STatyana Nikolova * @local_addr: Local ip/tcp address 191*30dc5e63STatyana Nikolova * @mapped_addr: Mapped local ip/tcp address 192*30dc5e63STatyana Nikolova * 193*30dc5e63STatyana Nikolova * Returns err code if mapping info is not found in the hash table, 194*30dc5e63STatyana Nikolova * otherwise returns 0 195*30dc5e63STatyana Nikolova */ 196*30dc5e63STatyana Nikolova int iwpm_remove_mapinfo(struct sockaddr_storage *local_addr, 197*30dc5e63STatyana Nikolova struct sockaddr_storage *mapped_addr); 198*30dc5e63STatyana Nikolova 199*30dc5e63STatyana Nikolova #endif /* _IW_PORTMAP_H */ 200