1 /* 2 * netlink/utils.h Utility Functions 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation version 2.1 7 * of the License. 8 * 9 * Copyright (c) 2003-2012 Thomas Graf <tgraf@suug.ch> 10 */ 11 12 #ifndef NETLINK_UTILS_H_ 13 #define NETLINK_UTILS_H_ 14 15 #include <netlink/netlink.h> 16 #include <netlink/list.h> 17 18 #ifdef __cplusplus 19 extern "C" { 20 #endif 21 22 /** 23 * @name Probability Constants 24 * @{ 25 */ 26 27 /** 28 * Lower probability limit 29 * @ingroup utils 30 */ 31 #define NL_PROB_MIN 0x0 32 33 /** 34 * Upper probability limit nl_dump_type 35 * @ingroup utils 36 */ 37 #define NL_PROB_MAX 0xffffffff 38 39 /** @} */ 40 41 enum { 42 NL_BYTE_RATE, 43 NL_BIT_RATE, 44 }; 45 46 /* unit pretty-printing */ 47 extern double nl_cancel_down_bytes(unsigned long long, char **); 48 extern double nl_cancel_down_bits(unsigned long long, char **); 49 extern int nl_rate2str(unsigned long long, int, char *, size_t); 50 extern double nl_cancel_down_us(uint32_t, char **); 51 52 /* generic unit translations */ 53 extern long nl_size2int(const char *); 54 extern char * nl_size2str(const size_t, char *, const size_t); 55 extern long nl_prob2int(const char *); 56 57 /* time translations */ 58 extern int nl_get_user_hz(void); 59 extern int nl_get_psched_hz(void); 60 extern uint32_t nl_us2ticks(uint32_t); 61 extern uint32_t nl_ticks2us(uint32_t); 62 extern int nl_str2msec(const char *, uint64_t *); 63 extern char * nl_msec2str(uint64_t, char *, size_t); 64 65 /* link layer protocol translations */ 66 extern char * nl_llproto2str(int, char *, size_t); 67 extern int nl_str2llproto(const char *); 68 69 /* ethernet protocol translations */ 70 extern char * nl_ether_proto2str(int, char *, size_t); 71 extern int nl_str2ether_proto(const char *); 72 73 /* IP protocol translations */ 74 extern char * nl_ip_proto2str(int, char *, size_t); 75 extern int nl_str2ip_proto(const char *); 76 77 /* Dumping helpers */ 78 extern void nl_new_line(struct nl_dump_params *); 79 extern void nl_dump(struct nl_dump_params *, const char *, ...); 80 extern void nl_dump_line(struct nl_dump_params *, const char *, ...); 81 82 enum { 83 NL_CAPABILITY_NONE, 84 85 /** 86 * rtnl_route_build_msg() no longer guesses the route scope 87 * if explicitly set to RT_SCOPE_NOWHERE. 88 * @ingroup utils 89 */ 90 NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE = 1, 91 #define NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE 92 93 /** 94 * rtnl_link_veth_get_peer() now returns a reference that is owned by the 95 * caller and must be released by the caller with rtnl_link_put(). 96 */ 97 NL_CAPABILITY_ROUTE_LINK_VETH_GET_PEER_OWN_REFERENCE = 2, 98 #define NL_CAPABILITY_ROUTE_LINK_VETH_GET_PEER_OWN_REFERENCE NL_CAPABILITY_ROUTE_LINK_VETH_GET_PEER_OWN_REFERENCE 99 100 /** 101 * rtnl_u32_add_action() and rtnl_basic_add_action() now grab a reference to act 102 * caller are free to release its own 103 */ 104 NL_CAPABILITY_ROUTE_LINK_CLS_ADD_ACT_OWN_REFERENCE = 3, 105 #define NL_CAPABILITY_ROUTE_LINK_CLS_ADD_ACT_OWN_REFERENCE NL_CAPABILITY_ROUTE_LINK_CLS_ADD_ACT_OWN_REFERENCE 106 107 /** 108 * Indicate that the local port is unspecified until the user accesses 109 * it (via nl_socket_get_local_port()) or until nl_connect(). More importantly, 110 * if the port is left unspecified, nl_connect() will retry generating another 111 * port when bind() fails with ADDRINUSE. 112 */ 113 NL_CAPABILITY_NL_CONNECT_RETRY_GENERATE_PORT_ON_ADDRINUSE = 4, 114 #define NL_CAPABILITY_NL_CONNECT_RETRY_GENERATE_PORT_ON_ADDRINUSE NL_CAPABILITY_NL_CONNECT_RETRY_GENERATE_PORT_ON_ADDRINUSE 115 116 __NL_CAPABILITY_MAX 117 #define NL_CAPABILITY_MAX (__NL_CAPABILITY_MAX - 1) 118 }; 119 int nl_has_capability (int capability); 120 121 #ifdef __cplusplus 122 } 123 #endif 124 125 #endif 126