130dc5e63STatyana Nikolova /* 230dc5e63STatyana Nikolova * Copyright (c) 2014 Intel Corporation. All rights reserved. 330dc5e63STatyana Nikolova * Copyright (c) 2014 Chelsio, Inc. All rights reserved. 430dc5e63STatyana Nikolova * 530dc5e63STatyana Nikolova * This software is available to you under a choice of one of two 630dc5e63STatyana Nikolova * licenses. You may choose to be licensed under the terms of the GNU 730dc5e63STatyana Nikolova * General Public License (GPL) Version 2, available from the file 830dc5e63STatyana Nikolova * COPYING in the main directory of this source tree, or the 930dc5e63STatyana Nikolova * OpenIB.org BSD license below: 1030dc5e63STatyana Nikolova * 1130dc5e63STatyana Nikolova * Redistribution and use in source and binary forms, with or 1230dc5e63STatyana Nikolova * without modification, are permitted provided that the following 1330dc5e63STatyana Nikolova * conditions are met: 1430dc5e63STatyana Nikolova * 1530dc5e63STatyana Nikolova * - Redistributions of source code must retain the above 1630dc5e63STatyana Nikolova * copyright notice, this list of conditions and the following 1730dc5e63STatyana Nikolova * disclaimer. 1830dc5e63STatyana Nikolova * 1930dc5e63STatyana Nikolova * - Redistributions in binary form must reproduce the above 2030dc5e63STatyana Nikolova * copyright notice, this list of conditions and the following 2130dc5e63STatyana Nikolova * disclaimer in the documentation and/or other materials 2230dc5e63STatyana Nikolova * provided with the distribution. 2330dc5e63STatyana Nikolova * 2430dc5e63STatyana Nikolova * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 2530dc5e63STatyana Nikolova * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2630dc5e63STatyana Nikolova * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 2730dc5e63STatyana Nikolova * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 2830dc5e63STatyana Nikolova * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 2930dc5e63STatyana Nikolova * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 3030dc5e63STatyana Nikolova * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 3130dc5e63STatyana Nikolova * SOFTWARE. 3230dc5e63STatyana Nikolova */ 3330dc5e63STatyana Nikolova #ifndef _IW_PORTMAP_H 3430dc5e63STatyana Nikolova #define _IW_PORTMAP_H 3530dc5e63STatyana Nikolova 3630dc5e63STatyana Nikolova #define IWPM_ULIBNAME_SIZE 32 3730dc5e63STatyana Nikolova #define IWPM_DEVNAME_SIZE 32 3830dc5e63STatyana Nikolova #define IWPM_IFNAME_SIZE 16 3930dc5e63STatyana Nikolova #define IWPM_IPADDR_SIZE 16 4030dc5e63STatyana Nikolova 4130dc5e63STatyana Nikolova enum { 4230dc5e63STatyana Nikolova IWPM_INVALID_NLMSG_ERR = 10, 4330dc5e63STatyana Nikolova IWPM_CREATE_MAPPING_ERR, 4430dc5e63STatyana Nikolova IWPM_DUPLICATE_MAPPING_ERR, 4530dc5e63STatyana Nikolova IWPM_UNKNOWN_MAPPING_ERR, 4630dc5e63STatyana Nikolova IWPM_CLIENT_DEV_INFO_ERR, 4730dc5e63STatyana Nikolova IWPM_USER_LIB_INFO_ERR, 4830dc5e63STatyana Nikolova IWPM_REMOTE_QUERY_REJECT 4930dc5e63STatyana Nikolova }; 5030dc5e63STatyana Nikolova 5130dc5e63STatyana Nikolova struct iwpm_dev_data { 5230dc5e63STatyana Nikolova char dev_name[IWPM_DEVNAME_SIZE]; 5330dc5e63STatyana Nikolova char if_name[IWPM_IFNAME_SIZE]; 5430dc5e63STatyana Nikolova }; 5530dc5e63STatyana Nikolova 5630dc5e63STatyana Nikolova struct iwpm_sa_data { 5730dc5e63STatyana Nikolova struct sockaddr_storage loc_addr; 5830dc5e63STatyana Nikolova struct sockaddr_storage mapped_loc_addr; 5930dc5e63STatyana Nikolova struct sockaddr_storage rem_addr; 6030dc5e63STatyana Nikolova struct sockaddr_storage mapped_rem_addr; 6130dc5e63STatyana Nikolova }; 6230dc5e63STatyana Nikolova 6330dc5e63STatyana Nikolova /** 6430dc5e63STatyana Nikolova * iwpm_init - Allocate resources for the iwarp port mapper 6530dc5e63STatyana Nikolova * 6630dc5e63STatyana Nikolova * Should be called when network interface goes up. 6730dc5e63STatyana Nikolova */ 6830dc5e63STatyana Nikolova int iwpm_init(u8); 6930dc5e63STatyana Nikolova 7030dc5e63STatyana Nikolova /** 7130dc5e63STatyana Nikolova * iwpm_exit - Deallocate resources for the iwarp port mapper 7230dc5e63STatyana Nikolova * 7330dc5e63STatyana Nikolova * Should be called when network interface goes down. 7430dc5e63STatyana Nikolova */ 7530dc5e63STatyana Nikolova int iwpm_exit(u8); 7630dc5e63STatyana Nikolova 7730dc5e63STatyana Nikolova /** 7830dc5e63STatyana Nikolova * iwpm_valid_pid - Check if the userspace iwarp port mapper pid is valid 7930dc5e63STatyana Nikolova * 8030dc5e63STatyana Nikolova * Returns true if the pid is greater than zero, otherwise returns false 8130dc5e63STatyana Nikolova */ 8230dc5e63STatyana Nikolova int iwpm_valid_pid(void); 8330dc5e63STatyana Nikolova 8430dc5e63STatyana Nikolova /** 8530dc5e63STatyana Nikolova * iwpm_register_pid - Send a netlink query to userspace 8630dc5e63STatyana Nikolova * to get the iwarp port mapper pid 8730dc5e63STatyana Nikolova * @pm_msg: Contains driver info to send to the userspace port mapper 8830dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 8930dc5e63STatyana Nikolova */ 9030dc5e63STatyana Nikolova int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client); 9130dc5e63STatyana Nikolova 9230dc5e63STatyana Nikolova /** 9330dc5e63STatyana Nikolova * iwpm_add_mapping - Send a netlink add mapping request to 9430dc5e63STatyana Nikolova * the userspace port mapper 9530dc5e63STatyana Nikolova * @pm_msg: Contains the local ip/tcp address info to send 9630dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 9730dc5e63STatyana Nikolova * 9830dc5e63STatyana Nikolova * If the request is successful, the pm_msg stores 9930dc5e63STatyana Nikolova * the port mapper response (mapped address info) 10030dc5e63STatyana Nikolova */ 10130dc5e63STatyana Nikolova int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client); 10230dc5e63STatyana Nikolova 10330dc5e63STatyana Nikolova /** 10430dc5e63STatyana Nikolova * iwpm_add_and_query_mapping - Send a netlink add and query mapping request 10530dc5e63STatyana Nikolova * to the userspace port mapper 10630dc5e63STatyana Nikolova * @pm_msg: Contains the local and remote ip/tcp address info to send 10730dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 10830dc5e63STatyana Nikolova * 10930dc5e63STatyana Nikolova * If the request is successful, the pm_msg stores the 11030dc5e63STatyana Nikolova * port mapper response (mapped local and remote address info) 11130dc5e63STatyana Nikolova */ 11230dc5e63STatyana Nikolova int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client); 11330dc5e63STatyana Nikolova 11430dc5e63STatyana Nikolova /** 11530dc5e63STatyana Nikolova * iwpm_remove_mapping - Send a netlink remove mapping request 11630dc5e63STatyana Nikolova * to the userspace port mapper 11730dc5e63STatyana Nikolova * 11830dc5e63STatyana Nikolova * @local_addr: Local ip/tcp address to remove 11930dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 12030dc5e63STatyana Nikolova */ 12130dc5e63STatyana Nikolova int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client); 12230dc5e63STatyana Nikolova 12330dc5e63STatyana Nikolova /** 12430dc5e63STatyana Nikolova * iwpm_register_pid_cb - Process the port mapper response to 12530dc5e63STatyana Nikolova * iwpm_register_pid query 12630dc5e63STatyana Nikolova * @skb: 12730dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 12830dc5e63STatyana Nikolova * 12930dc5e63STatyana Nikolova * If successful, the function receives the userspace port mapper pid 13030dc5e63STatyana Nikolova * which is used in future communication with the port mapper 13130dc5e63STatyana Nikolova */ 13230dc5e63STatyana Nikolova int iwpm_register_pid_cb(struct sk_buff *, struct netlink_callback *); 13330dc5e63STatyana Nikolova 13430dc5e63STatyana Nikolova /** 13530dc5e63STatyana Nikolova * iwpm_add_mapping_cb - Process the port mapper response to 13630dc5e63STatyana Nikolova * iwpm_add_mapping request 13730dc5e63STatyana Nikolova * @skb: 13830dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 13930dc5e63STatyana Nikolova */ 14030dc5e63STatyana Nikolova int iwpm_add_mapping_cb(struct sk_buff *, struct netlink_callback *); 14130dc5e63STatyana Nikolova 14230dc5e63STatyana Nikolova /** 14330dc5e63STatyana Nikolova * iwpm_add_and_query_mapping_cb - Process the port mapper response to 14430dc5e63STatyana Nikolova * iwpm_add_and_query_mapping request 14530dc5e63STatyana Nikolova * @skb: 14630dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 14730dc5e63STatyana Nikolova */ 14830dc5e63STatyana Nikolova int iwpm_add_and_query_mapping_cb(struct sk_buff *, struct netlink_callback *); 14930dc5e63STatyana Nikolova 15030dc5e63STatyana Nikolova /** 151*6eec1774STatyana Nikolova * iwpm_remote_info_cb - Process remote connecting peer address info, which 152*6eec1774STatyana Nikolova * the port mapper has received from the connecting peer 153*6eec1774STatyana Nikolova * 154*6eec1774STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 155*6eec1774STatyana Nikolova * 156*6eec1774STatyana Nikolova * Stores the IPv4/IPv6 address info in a hash table 157*6eec1774STatyana Nikolova */ 158*6eec1774STatyana Nikolova int iwpm_remote_info_cb(struct sk_buff *, struct netlink_callback *); 159*6eec1774STatyana Nikolova 160*6eec1774STatyana Nikolova /** 16130dc5e63STatyana Nikolova * iwpm_mapping_error_cb - Process port mapper notification for error 16230dc5e63STatyana Nikolova * 16330dc5e63STatyana Nikolova * @skb: 16430dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 16530dc5e63STatyana Nikolova */ 16630dc5e63STatyana Nikolova int iwpm_mapping_error_cb(struct sk_buff *, struct netlink_callback *); 16730dc5e63STatyana Nikolova 16830dc5e63STatyana Nikolova /** 16930dc5e63STatyana Nikolova * iwpm_mapping_info_cb - Process a notification that the userspace 17030dc5e63STatyana Nikolova * port mapper daemon is started 17130dc5e63STatyana Nikolova * @skb: 17230dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 17330dc5e63STatyana Nikolova * 17430dc5e63STatyana Nikolova * Using the received port mapper pid, send all the local mapping 17530dc5e63STatyana Nikolova * info records to the userspace port mapper 17630dc5e63STatyana Nikolova */ 17730dc5e63STatyana Nikolova int iwpm_mapping_info_cb(struct sk_buff *, struct netlink_callback *); 17830dc5e63STatyana Nikolova 17930dc5e63STatyana Nikolova /** 18030dc5e63STatyana Nikolova * iwpm_ack_mapping_info_cb - Process the port mapper ack for 18130dc5e63STatyana Nikolova * the provided local mapping info records 18230dc5e63STatyana Nikolova * @skb: 18330dc5e63STatyana Nikolova * @cb: Contains the received message (payload and netlink header) 18430dc5e63STatyana Nikolova */ 18530dc5e63STatyana Nikolova int iwpm_ack_mapping_info_cb(struct sk_buff *, struct netlink_callback *); 18630dc5e63STatyana Nikolova 18730dc5e63STatyana Nikolova /** 188*6eec1774STatyana Nikolova * iwpm_get_remote_info - Get the remote connecting peer address info 189*6eec1774STatyana Nikolova * 190*6eec1774STatyana Nikolova * @mapped_loc_addr: Mapped local address of the listening peer 191*6eec1774STatyana Nikolova * @mapped_rem_addr: Mapped remote address of the connecting peer 192*6eec1774STatyana Nikolova * @remote_addr: To store the remote address of the connecting peer 193*6eec1774STatyana Nikolova * @nl_client: The index of the netlink client 194*6eec1774STatyana Nikolova * 195*6eec1774STatyana Nikolova * The remote address info is retrieved and provided to the client in 196*6eec1774STatyana Nikolova * the remote_addr. After that it is removed from the hash table 197*6eec1774STatyana Nikolova */ 198*6eec1774STatyana Nikolova int iwpm_get_remote_info(struct sockaddr_storage *mapped_loc_addr, 199*6eec1774STatyana Nikolova struct sockaddr_storage *mapped_rem_addr, 200*6eec1774STatyana Nikolova struct sockaddr_storage *remote_addr, u8 nl_client); 201*6eec1774STatyana Nikolova 202*6eec1774STatyana Nikolova /** 20330dc5e63STatyana Nikolova * iwpm_create_mapinfo - Store local and mapped IPv4/IPv6 address 20430dc5e63STatyana Nikolova * info in a hash table 20530dc5e63STatyana Nikolova * @local_addr: Local ip/tcp address 20630dc5e63STatyana Nikolova * @mapped_addr: Mapped local ip/tcp address 20730dc5e63STatyana Nikolova * @nl_client: The index of the netlink client 20830dc5e63STatyana Nikolova */ 20930dc5e63STatyana Nikolova int iwpm_create_mapinfo(struct sockaddr_storage *local_addr, 21030dc5e63STatyana Nikolova struct sockaddr_storage *mapped_addr, u8 nl_client); 21130dc5e63STatyana Nikolova 21230dc5e63STatyana Nikolova /** 21330dc5e63STatyana Nikolova * iwpm_remove_mapinfo - Remove local and mapped IPv4/IPv6 address 21430dc5e63STatyana Nikolova * info from the hash table 21530dc5e63STatyana Nikolova * @local_addr: Local ip/tcp address 21630dc5e63STatyana Nikolova * @mapped_addr: Mapped local ip/tcp address 21730dc5e63STatyana Nikolova * 21830dc5e63STatyana Nikolova * Returns err code if mapping info is not found in the hash table, 21930dc5e63STatyana Nikolova * otherwise returns 0 22030dc5e63STatyana Nikolova */ 22130dc5e63STatyana Nikolova int iwpm_remove_mapinfo(struct sockaddr_storage *local_addr, 22230dc5e63STatyana Nikolova struct sockaddr_storage *mapped_addr); 22330dc5e63STatyana Nikolova 22430dc5e63STatyana Nikolova #endif /* _IW_PORTMAP_H */ 225