xref: /openbmc/linux/include/rdma/iw_portmap.h (revision b0bad9ad514fc1dd8890f1749f5d2425a73270e3)
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;
61*b0bad9adSSteve Wise 	u32 flags;
6230dc5e63STatyana Nikolova };
6330dc5e63STatyana Nikolova 
6430dc5e63STatyana Nikolova /**
6530dc5e63STatyana Nikolova  * iwpm_init - Allocate resources for the iwarp port mapper
6630dc5e63STatyana Nikolova  *
6730dc5e63STatyana Nikolova  * Should be called when network interface goes up.
6830dc5e63STatyana Nikolova  */
6930dc5e63STatyana Nikolova int iwpm_init(u8);
7030dc5e63STatyana Nikolova 
7130dc5e63STatyana Nikolova /**
7230dc5e63STatyana Nikolova  * iwpm_exit - Deallocate resources for the iwarp port mapper
7330dc5e63STatyana Nikolova  *
7430dc5e63STatyana Nikolova  * Should be called when network interface goes down.
7530dc5e63STatyana Nikolova  */
7630dc5e63STatyana Nikolova int iwpm_exit(u8);
7730dc5e63STatyana Nikolova 
7830dc5e63STatyana Nikolova /**
7930dc5e63STatyana Nikolova  * iwpm_valid_pid - Check if the userspace iwarp port mapper pid is valid
8030dc5e63STatyana Nikolova  *
8130dc5e63STatyana Nikolova  * Returns true if the pid is greater than zero, otherwise returns false
8230dc5e63STatyana Nikolova  */
8330dc5e63STatyana Nikolova int iwpm_valid_pid(void);
8430dc5e63STatyana Nikolova 
8530dc5e63STatyana Nikolova /**
8630dc5e63STatyana Nikolova  * iwpm_register_pid - Send a netlink query to userspace
8730dc5e63STatyana Nikolova  *                     to get the iwarp port mapper pid
8830dc5e63STatyana Nikolova  * @pm_msg: Contains driver info to send to the userspace port mapper
8930dc5e63STatyana Nikolova  * @nl_client: The index of the netlink client
9030dc5e63STatyana Nikolova  */
9130dc5e63STatyana Nikolova int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client);
9230dc5e63STatyana Nikolova 
9330dc5e63STatyana Nikolova /**
9430dc5e63STatyana Nikolova  * iwpm_add_mapping - Send a netlink add mapping request to
9530dc5e63STatyana Nikolova  *                    the userspace port mapper
9630dc5e63STatyana Nikolova  * @pm_msg: Contains the local ip/tcp address info to send
9730dc5e63STatyana Nikolova  * @nl_client: The index of the netlink client
9830dc5e63STatyana Nikolova  *
9930dc5e63STatyana Nikolova  * If the request is successful, the pm_msg stores
10030dc5e63STatyana Nikolova  * the port mapper response (mapped address info)
10130dc5e63STatyana Nikolova  */
10230dc5e63STatyana Nikolova int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client);
10330dc5e63STatyana Nikolova 
10430dc5e63STatyana Nikolova /**
10530dc5e63STatyana Nikolova  * iwpm_add_and_query_mapping - Send a netlink add and query mapping request
10630dc5e63STatyana Nikolova  *				 to the userspace port mapper
10730dc5e63STatyana Nikolova  * @pm_msg: Contains the local and remote ip/tcp address info to send
10830dc5e63STatyana Nikolova  * @nl_client: The index of the netlink client
10930dc5e63STatyana Nikolova  *
11030dc5e63STatyana Nikolova  * If the request is successful, the pm_msg stores the
11130dc5e63STatyana Nikolova  * port mapper response (mapped local and remote address info)
11230dc5e63STatyana Nikolova  */
11330dc5e63STatyana Nikolova int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client);
11430dc5e63STatyana Nikolova 
11530dc5e63STatyana Nikolova /**
11630dc5e63STatyana Nikolova  * iwpm_remove_mapping - Send a netlink remove mapping request
11730dc5e63STatyana Nikolova  *                       to the userspace port mapper
11830dc5e63STatyana Nikolova  *
11930dc5e63STatyana Nikolova  * @local_addr: Local ip/tcp address to remove
12030dc5e63STatyana Nikolova  * @nl_client: The index of the netlink client
12130dc5e63STatyana Nikolova  */
12230dc5e63STatyana Nikolova int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client);
12330dc5e63STatyana Nikolova 
12430dc5e63STatyana Nikolova /**
12530dc5e63STatyana Nikolova  * iwpm_register_pid_cb - Process the port mapper response to
12630dc5e63STatyana Nikolova  *                        iwpm_register_pid query
12730dc5e63STatyana Nikolova  * @skb:
12830dc5e63STatyana Nikolova  * @cb: Contains the received message (payload and netlink header)
12930dc5e63STatyana Nikolova  *
13030dc5e63STatyana Nikolova  * If successful, the function receives the userspace port mapper pid
13130dc5e63STatyana Nikolova  * which is used in future communication with the port mapper
13230dc5e63STatyana Nikolova  */
13330dc5e63STatyana Nikolova int iwpm_register_pid_cb(struct sk_buff *, struct netlink_callback *);
13430dc5e63STatyana Nikolova 
13530dc5e63STatyana Nikolova /**
13630dc5e63STatyana Nikolova  * iwpm_add_mapping_cb - Process the port mapper response to
13730dc5e63STatyana Nikolova  *                       iwpm_add_mapping request
13830dc5e63STatyana Nikolova  * @skb:
13930dc5e63STatyana Nikolova  * @cb: Contains the received message (payload and netlink header)
14030dc5e63STatyana Nikolova  */
14130dc5e63STatyana Nikolova int iwpm_add_mapping_cb(struct sk_buff *, struct netlink_callback *);
14230dc5e63STatyana Nikolova 
14330dc5e63STatyana Nikolova /**
14430dc5e63STatyana Nikolova  * iwpm_add_and_query_mapping_cb - Process the port mapper response to
14530dc5e63STatyana Nikolova  *                                 iwpm_add_and_query_mapping request
14630dc5e63STatyana Nikolova  * @skb:
14730dc5e63STatyana Nikolova  * @cb: Contains the received message (payload and netlink header)
14830dc5e63STatyana Nikolova  */
14930dc5e63STatyana Nikolova int iwpm_add_and_query_mapping_cb(struct sk_buff *, struct netlink_callback *);
15030dc5e63STatyana Nikolova 
15130dc5e63STatyana Nikolova /**
1526eec1774STatyana Nikolova  * iwpm_remote_info_cb - Process remote connecting peer address info, which
1536eec1774STatyana Nikolova  *                       the port mapper has received from the connecting peer
1546eec1774STatyana Nikolova  *
1556eec1774STatyana Nikolova  * @cb: Contains the received message (payload and netlink header)
1566eec1774STatyana Nikolova  *
1576eec1774STatyana Nikolova  * Stores the IPv4/IPv6 address info in a hash table
1586eec1774STatyana Nikolova  */
1596eec1774STatyana Nikolova int iwpm_remote_info_cb(struct sk_buff *, struct netlink_callback *);
1606eec1774STatyana Nikolova 
1616eec1774STatyana Nikolova /**
16230dc5e63STatyana Nikolova  * iwpm_mapping_error_cb - Process port mapper notification for error
16330dc5e63STatyana Nikolova  *
16430dc5e63STatyana Nikolova  * @skb:
16530dc5e63STatyana Nikolova  * @cb: Contains the received message (payload and netlink header)
16630dc5e63STatyana Nikolova  */
16730dc5e63STatyana Nikolova int iwpm_mapping_error_cb(struct sk_buff *, struct netlink_callback *);
16830dc5e63STatyana Nikolova 
16930dc5e63STatyana Nikolova /**
17030dc5e63STatyana Nikolova  * iwpm_mapping_info_cb - Process a notification that the userspace
17130dc5e63STatyana Nikolova  *                        port mapper daemon is started
17230dc5e63STatyana Nikolova  * @skb:
17330dc5e63STatyana Nikolova  * @cb: Contains the received message (payload and netlink header)
17430dc5e63STatyana Nikolova  *
17530dc5e63STatyana Nikolova  * Using the received port mapper pid, send all the local mapping
17630dc5e63STatyana Nikolova  * info records to the userspace port mapper
17730dc5e63STatyana Nikolova  */
17830dc5e63STatyana Nikolova int iwpm_mapping_info_cb(struct sk_buff *, struct netlink_callback *);
17930dc5e63STatyana Nikolova 
18030dc5e63STatyana Nikolova /**
18130dc5e63STatyana Nikolova  * iwpm_ack_mapping_info_cb - Process the port mapper ack for
18230dc5e63STatyana Nikolova  *                            the provided local mapping info records
18330dc5e63STatyana Nikolova  * @skb:
18430dc5e63STatyana Nikolova  * @cb: Contains the received message (payload and netlink header)
18530dc5e63STatyana Nikolova  */
18630dc5e63STatyana Nikolova int iwpm_ack_mapping_info_cb(struct sk_buff *, struct netlink_callback *);
18730dc5e63STatyana Nikolova 
18830dc5e63STatyana Nikolova /**
1896eec1774STatyana Nikolova  * iwpm_get_remote_info - Get the remote connecting peer address info
1906eec1774STatyana Nikolova  *
1916eec1774STatyana Nikolova  * @mapped_loc_addr: Mapped local address of the listening peer
1926eec1774STatyana Nikolova  * @mapped_rem_addr: Mapped remote address of the connecting peer
1936eec1774STatyana Nikolova  * @remote_addr: To store the remote address of the connecting peer
1946eec1774STatyana Nikolova  * @nl_client: The index of the netlink client
1956eec1774STatyana Nikolova  *
1966eec1774STatyana Nikolova  * The remote address info is retrieved and provided to the client in
1976eec1774STatyana Nikolova  * the remote_addr. After that it is removed from the hash table
1986eec1774STatyana Nikolova  */
1996eec1774STatyana Nikolova int iwpm_get_remote_info(struct sockaddr_storage *mapped_loc_addr,
2006eec1774STatyana Nikolova 			struct sockaddr_storage *mapped_rem_addr,
2016eec1774STatyana Nikolova 			struct sockaddr_storage *remote_addr, u8 nl_client);
2026eec1774STatyana Nikolova 
2036eec1774STatyana Nikolova /**
20430dc5e63STatyana Nikolova  * iwpm_create_mapinfo - Store local and mapped IPv4/IPv6 address
20530dc5e63STatyana Nikolova  *                       info in a hash table
20630dc5e63STatyana Nikolova  * @local_addr: Local ip/tcp address
20730dc5e63STatyana Nikolova  * @mapped_addr: Mapped local ip/tcp address
20830dc5e63STatyana Nikolova  * @nl_client: The index of the netlink client
209*b0bad9adSSteve Wise  * @map_flags: IWPM mapping flags
21030dc5e63STatyana Nikolova  */
21130dc5e63STatyana Nikolova int iwpm_create_mapinfo(struct sockaddr_storage *local_addr,
212*b0bad9adSSteve Wise 			struct sockaddr_storage *mapped_addr, u8 nl_client,
213*b0bad9adSSteve Wise 			u32 map_flags);
21430dc5e63STatyana Nikolova 
21530dc5e63STatyana Nikolova /**
21630dc5e63STatyana Nikolova  * iwpm_remove_mapinfo - Remove local and mapped IPv4/IPv6 address
21730dc5e63STatyana Nikolova  *                       info from the hash table
21830dc5e63STatyana Nikolova  * @local_addr: Local ip/tcp address
21930dc5e63STatyana Nikolova  * @mapped_addr: Mapped local ip/tcp address
22030dc5e63STatyana Nikolova  *
22130dc5e63STatyana Nikolova  * Returns err code if mapping info is not found in the hash table,
22230dc5e63STatyana Nikolova  * otherwise returns 0
22330dc5e63STatyana Nikolova  */
22430dc5e63STatyana Nikolova int iwpm_remove_mapinfo(struct sockaddr_storage *local_addr,
22530dc5e63STatyana Nikolova 			struct sockaddr_storage *mapped_addr);
22630dc5e63STatyana Nikolova 
227*b0bad9adSSteve Wise /**
228*b0bad9adSSteve Wise  * iwpm_hello_cb - Process a hello message from iwpmd
229*b0bad9adSSteve Wise  *
230*b0bad9adSSteve Wise  * @skb:
231*b0bad9adSSteve Wise  * @cb: Contains the received message (payload and netlink header)
232*b0bad9adSSteve Wise  *
233*b0bad9adSSteve Wise  * Using the received port mapper pid, send the kernel's abi_version
234*b0bad9adSSteve Wise  * after adjusting it to support the iwpmd version.
235*b0bad9adSSteve Wise  */
236*b0bad9adSSteve Wise int iwpm_hello_cb(struct sk_buff *skb, struct netlink_callback *cb);
23730dc5e63STatyana Nikolova #endif /* _IW_PORTMAP_H */
238