162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2014 Intel Corporation. All rights reserved.
462306a36Sopenharmony_ci * Copyright (c) 2014 Chelsio, Inc. All rights reserved.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef _IW_PORTMAP_H
862306a36Sopenharmony_ci#define _IW_PORTMAP_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/socket.h>
1162306a36Sopenharmony_ci#include <linux/netlink.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define IWPM_ULIBNAME_SIZE	32
1462306a36Sopenharmony_ci#define IWPM_DEVNAME_SIZE	32
1562306a36Sopenharmony_ci#define IWPM_IFNAME_SIZE	16
1662306a36Sopenharmony_ci#define IWPM_IPADDR_SIZE	16
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cienum {
1962306a36Sopenharmony_ci	IWPM_INVALID_NLMSG_ERR = 10,
2062306a36Sopenharmony_ci	IWPM_CREATE_MAPPING_ERR,
2162306a36Sopenharmony_ci	IWPM_DUPLICATE_MAPPING_ERR,
2262306a36Sopenharmony_ci	IWPM_UNKNOWN_MAPPING_ERR,
2362306a36Sopenharmony_ci	IWPM_CLIENT_DEV_INFO_ERR,
2462306a36Sopenharmony_ci	IWPM_USER_LIB_INFO_ERR,
2562306a36Sopenharmony_ci	IWPM_REMOTE_QUERY_REJECT
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistruct iwpm_dev_data {
2962306a36Sopenharmony_ci	char dev_name[IWPM_DEVNAME_SIZE];
3062306a36Sopenharmony_ci	char if_name[IWPM_IFNAME_SIZE];
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistruct iwpm_sa_data {
3462306a36Sopenharmony_ci	struct sockaddr_storage loc_addr;
3562306a36Sopenharmony_ci	struct sockaddr_storage mapped_loc_addr;
3662306a36Sopenharmony_ci	struct sockaddr_storage rem_addr;
3762306a36Sopenharmony_ci	struct sockaddr_storage mapped_rem_addr;
3862306a36Sopenharmony_ci	u32 flags;
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciint iwpm_init(u8);
4262306a36Sopenharmony_ciint iwpm_exit(u8);
4362306a36Sopenharmony_ciint iwpm_valid_pid(void);
4462306a36Sopenharmony_ciint iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client);
4562306a36Sopenharmony_ciint iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client);
4662306a36Sopenharmony_ciint iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client);
4762306a36Sopenharmony_ciint iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client);
4862306a36Sopenharmony_ciint iwpm_register_pid_cb(struct sk_buff *, struct netlink_callback *);
4962306a36Sopenharmony_ciint iwpm_add_mapping_cb(struct sk_buff *, struct netlink_callback *);
5062306a36Sopenharmony_ciint iwpm_add_and_query_mapping_cb(struct sk_buff *, struct netlink_callback *);
5162306a36Sopenharmony_ciint iwpm_remote_info_cb(struct sk_buff *, struct netlink_callback *);
5262306a36Sopenharmony_ciint iwpm_mapping_error_cb(struct sk_buff *, struct netlink_callback *);
5362306a36Sopenharmony_ciint iwpm_mapping_info_cb(struct sk_buff *, struct netlink_callback *);
5462306a36Sopenharmony_ciint iwpm_ack_mapping_info_cb(struct sk_buff *, struct netlink_callback *);
5562306a36Sopenharmony_ciint iwpm_get_remote_info(struct sockaddr_storage *mapped_loc_addr,
5662306a36Sopenharmony_ci			struct sockaddr_storage *mapped_rem_addr,
5762306a36Sopenharmony_ci			struct sockaddr_storage *remote_addr, u8 nl_client);
5862306a36Sopenharmony_ciint iwpm_create_mapinfo(struct sockaddr_storage *local_addr,
5962306a36Sopenharmony_ci			struct sockaddr_storage *mapped_addr, u8 nl_client,
6062306a36Sopenharmony_ci			u32 map_flags);
6162306a36Sopenharmony_ciint iwpm_remove_mapinfo(struct sockaddr_storage *local_addr,
6262306a36Sopenharmony_ci			struct sockaddr_storage *mapped_addr);
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ciint iwpm_hello_cb(struct sk_buff *skb, struct netlink_callback *cb);
6562306a36Sopenharmony_ci#endif /* _IW_PORTMAP_H */
66