blob: 844fb1f3a180b3599d10f422fe5323011561b0ac [file] [log] [blame]
//SPDX-License-Identifier: MediaTekProprietary
#ifndef __PAL_NM_H__
#define __PAL_NM_H__
/**
* @file pal_nm.h
* @brief
* @author MediaTek
* @version v0.1
* @date 2016-07-11
*/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define NM_INTERFACE_FLAG_UP (0x1<<0) //IFF_UP
#define NM_INTERFACE_FLAG_LOOPBACK (0x1<<2) //IPP_LOOPBACK
typedef enum {
NM_IP_TYPE_UNKNOWN = 0,
NM_IP_TYPE_V6_UNSPEC = 0x1,
NM_IP_TYPE_V6_LOOPBACK = 0x2,
NM_IP_TYPE_V6_MULTICAST = 0x4,
NM_IP_TYPE_V6_LINKLOCAL = 0x8,
NM_IP_TYPE_V6_SITELOCAL = 0x10,
NM_IP_TYPE_V6_GLOBAL_PERNAMENT = 0x20,
NM_IP_TYPE_V6_GLOBAL_TEMP = 0x40,
NM_IP_TYPE_V6_GLOBAL_DYNAMIC =0x80,
NM_IP_TYPE_V6_GLOBAL = NM_IP_TYPE_V6_GLOBAL_PERNAMENT | NM_IP_TYPE_V6_GLOBAL_TEMP | NM_IP_TYPE_V6_GLOBAL_DYNAMIC,
NM_IP_TYPE_V6_UNIQUE = 0x100,
NM_IP_TYPE_V6_ALLCONFIG = NM_IP_TYPE_V6_GLOBAL | NM_IP_TYPE_V6_UNIQUE,
NM_IP_TYPE_V6_VALIDIP = NM_IP_TYPE_V6_GLOBAL_PERNAMENT | NM_IP_TYPE_V6_GLOBAL_DYNAMIC | NM_IP_TYPE_V6_UNIQUE, /*For App use*/
} NM_IP_TYPE_V6;
typedef enum {
NM_NETWORK_TYPE_UNKNOW = 0,
NM_NETWORK_TYPE_IMS = 1,
NM_NETWORK_TYPE_INTERNET = 2
} NM_NETWORK_TYPE;
/*interface ipv4 related APIs*/
int nm_interface_ipv4_set(const char *intf_name, const char* addr, int prefix_len);
int nm_interface_ipv4_up(const char *intf_name);
int nm_interface_ipv4_down(const char *intf_name);
int nm_interface_ipv4_mtu_set(const char *intf_name, int mtu);
int nm_interface_ipv4_info_get(const char *intf_name, unsigned long *addr,
int *prefix_len, int *mtu, unsigned int*flags);
int nm_interface_ipv4_hwaddr_get(const char *intf_name, unsigned char *hw_addr);
int nm_interface_ipv4_addr_clear(const char *intf_name);
/*interface ipv6 related APIs*/
int nm_interface_ipv6_mtu_set(const char *intf_name, int mtu);
int nm_interface_ipv6_addr_clear(const char *intf_name);
int nm_interface_ipv6_set(const char *intf_name, int on);
int nm_interface_ipv6_privacyextenstion_enable_set(const char *intf_name, int on);
int nm_interface_ipv6_ndoffload_enable_set(const char *intf_name, int on);
int nm_interface_ipv6_addr_set(const char *intf_name, const char *addr, int prefix_len);
int nm_interface_ipv6_addr_get(const char *intf_name, int addr_type, char *addr, int *prefix_len);
/*network related APIs*/
int nm_network_create(unsigned net_id, const char *permission);
int nm_network_destroy(unsigned net_id);
int nm_network_default_set(unsigned net_id);
int nm_network_default_clear();
int nm_network_interface_add(unsigned net_id, const char* intf_name);
int nm_network_interface_remove(unsigned net_id, const char* intf_name);
int nm_network_route_add(unsigned net_id, const char* intf_name,
const char *destination, const char *nexthop,
int legacy, unsigned int uid);
int nm_network_route_remove( unsigned net_id, const char* intf_name,
const char *destination, const char *nexthop,
int legacy, unsigned int uid);
/*ipfwd related APIs*/
int nm_fwd_ipv4_set(int enable, const char *requestor);
int nm_fwd_ipv4_get(int *enable);
int nm_fwd_ipv6_set(int enable, const char *requestor);
int nm_fwd_ipv6_get(int *enable);
/*DNS related APIs*/
//set ipv6 dns name server
int nm_resolver_ipv6_dns_set(unsigned net_id, const char *domains, const char* const* servers, int numservers, NM_NETWORK_TYPE type);
//set ipv4 dns name server
int nm_resolver_ipv4_dns_set(unsigned net_id, const char *domains, const char* const* servers, int numservers, NM_NETWORK_TYPE type);
//set ipv4 && ipv6 dns name server
int nm_resolver_dns_set(unsigned net_id, const char *domains, const char* const* servers, int numservers, NM_NETWORK_TYPE type);
//clear name server for both ipv4/ipv6
int nm_resolver_dns_clear(unsigned net_id);
//flush dns cache
int nm_resolver_dns_cache_flush(unsigned net_id);
int nm_command_test(char *intf);
int nm_interface_get_netid(const char *intf_name,unsigned int *netid);
void nm_network_policy_route_init();
int nm_network_ipv6_policy_route_modify(uint16_t action, uint32_t table, const char* interface);
int nm_network_ipv6_policy_rule_modify(uint16_t action, uint32_t priority, uint32_t table, uint32_t fwmark, uint32_t mask, const char* iif, const char* oif);
int nm_network_ipv4_policy_route_modify(uint16_t action, uint32_t table, const char* interface);
int nm_network_ipv4_policy_rule_modify(uint16_t action, uint32_t priority, uint32_t table, uint32_t fwmark, uint32_t mask, const char* iif, const char* oif);
struct Stats {
uint64_t rxBytes;
uint64_t rxPackets;
uint64_t txBytes;
uint64_t txPackets;
uint64_t tcpRxPackets;
uint64_t tcpTxPackets;
};
int parseIfaceStats(const char* iface, struct Stats* stats);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __PAL_NM_H__*/