xref: /openbmc/linux/include/rdma/iw_portmap.h (revision 6eec177461751f0fe191cf9977cde692b9481d0a)
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