libnl
3.2.3
|
00001 /* 00002 * netlink/route/link.h Links (Interfaces) 00003 * 00004 * This library is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Lesser General Public 00006 * License as published by the Free Software Foundation version 2.1 00007 * of the License. 00008 * 00009 * Copyright (c) 2003-2011 Thomas Graf <tgraf@suug.ch> 00010 */ 00011 00012 #ifndef NETLINK_LINK_H_ 00013 #define NETLINK_LINK_H_ 00014 00015 #include <netlink/netlink.h> 00016 #include <netlink/cache.h> 00017 #include <netlink/addr.h> 00018 #include <linux/if.h> 00019 00020 #ifdef __cplusplus 00021 extern "C" { 00022 #endif 00023 00024 /** 00025 * @struct rtnl_link link.h "netlink/route/link.h" 00026 * @brief Link object 00027 * @implements nl_object 00028 * @ingroup link 00029 * 00030 * @copydoc private_struct 00031 */ 00032 struct rtnl_link; 00033 00034 /** 00035 * @ingroup link 00036 */ 00037 typedef enum { 00038 RTNL_LINK_RX_PACKETS, /*!< Packets received */ 00039 RTNL_LINK_TX_PACKETS, /*!< Packets sent */ 00040 RTNL_LINK_RX_BYTES, /*!< Bytes received */ 00041 RTNL_LINK_TX_BYTES, /*!< Bytes sent */ 00042 RTNL_LINK_RX_ERRORS, /*!< Receive errors */ 00043 RTNL_LINK_TX_ERRORS, /*!< Send errors */ 00044 RTNL_LINK_RX_DROPPED, /*!< Received packets dropped */ 00045 RTNL_LINK_TX_DROPPED, /*!< Packets dropped during transmit */ 00046 RTNL_LINK_RX_COMPRESSED, /*!< Compressed packets received */ 00047 RTNL_LINK_TX_COMPRESSED, /*!< Compressed packets sent */ 00048 RTNL_LINK_RX_FIFO_ERR, /*!< Receive FIFO errors */ 00049 RTNL_LINK_TX_FIFO_ERR, /*!< Send FIFO errors */ 00050 RTNL_LINK_RX_LEN_ERR, /*!< Length errors */ 00051 RTNL_LINK_RX_OVER_ERR, /*!< Over errors */ 00052 RTNL_LINK_RX_CRC_ERR, /*!< CRC errors */ 00053 RTNL_LINK_RX_FRAME_ERR, /*!< Frame errors */ 00054 RTNL_LINK_RX_MISSED_ERR, /*!< Missed errors */ 00055 RTNL_LINK_TX_ABORT_ERR, /*!< Aborted errors */ 00056 RTNL_LINK_TX_CARRIER_ERR, /*!< Carrier errors */ 00057 RTNL_LINK_TX_HBEAT_ERR, /*!< Heartbeat errors */ 00058 RTNL_LINK_TX_WIN_ERR, /*!< Window errors */ 00059 RTNL_LINK_COLLISIONS, /*!< Send collisions */ 00060 RTNL_LINK_MULTICAST, /*!< Multicast */ 00061 RTNL_LINK_IP6_INPKTS, /*!< IPv6 SNMP InReceives */ 00062 RTNL_LINK_IP6_INHDRERRORS, /*!< IPv6 SNMP InHdrErrors */ 00063 RTNL_LINK_IP6_INTOOBIGERRORS, /*!< IPv6 SNMP InTooBigErrors */ 00064 RTNL_LINK_IP6_INNOROUTES, /*!< IPv6 SNMP InNoRoutes */ 00065 RTNL_LINK_IP6_INADDRERRORS, /*!< IPv6 SNMP InAddrErrors */ 00066 RTNL_LINK_IP6_INUNKNOWNPROTOS, /*!< IPv6 SNMP InUnknownProtos */ 00067 RTNL_LINK_IP6_INTRUNCATEDPKTS, /*!< IPv6 SNMP InTruncatedPkts */ 00068 RTNL_LINK_IP6_INDISCARDS, /*!< IPv6 SNMP InDiscards */ 00069 RTNL_LINK_IP6_INDELIVERS, /*!< IPv6 SNMP InDelivers */ 00070 RTNL_LINK_IP6_OUTFORWDATAGRAMS, /*!< IPv6 SNMP OutForwDatagrams */ 00071 RTNL_LINK_IP6_OUTPKTS, /*!< IPv6 SNMP OutRequests */ 00072 RTNL_LINK_IP6_OUTDISCARDS, /*!< IPv6 SNMP OutDiscards */ 00073 RTNL_LINK_IP6_OUTNOROUTES, /*!< IPv6 SNMP OutNoRoutes */ 00074 RTNL_LINK_IP6_REASMTIMEOUT, /*!< IPv6 SNMP ReasmTimeout */ 00075 RTNL_LINK_IP6_REASMREQDS, /*!< IPv6 SNMP ReasmReqds */ 00076 RTNL_LINK_IP6_REASMOKS, /*!< IPv6 SNMP ReasmOKs */ 00077 RTNL_LINK_IP6_REASMFAILS, /*!< IPv6 SNMP ReasmFails */ 00078 RTNL_LINK_IP6_FRAGOKS, /*!< IPv6 SNMP FragOKs */ 00079 RTNL_LINK_IP6_FRAGFAILS, /*!< IPv6 SNMP FragFails */ 00080 RTNL_LINK_IP6_FRAGCREATES, /*!< IPv6 SNMP FragCreates */ 00081 RTNL_LINK_IP6_INMCASTPKTS, /*!< IPv6 SNMP InMcastPkts */ 00082 RTNL_LINK_IP6_OUTMCASTPKTS, /*!< IPv6 SNMP OutMcastPkts */ 00083 RTNL_LINK_IP6_INBCASTPKTS, /*!< IPv6 SNMP InBcastPkts */ 00084 RTNL_LINK_IP6_OUTBCASTPKTS, /*!< IPv6 SNMP OutBcastPkts */ 00085 RTNL_LINK_IP6_INOCTETS, /*!< IPv6 SNMP InOctets */ 00086 RTNL_LINK_IP6_OUTOCTETS, /*!< IPv6 SNMP OutOctets */ 00087 RTNL_LINK_IP6_INMCASTOCTETS, /*!< IPv6 SNMP InMcastOctets */ 00088 RTNL_LINK_IP6_OUTMCASTOCTETS, /*!< IPv6 SNMP OutMcastOctets */ 00089 RTNL_LINK_IP6_INBCASTOCTETS, /*!< IPv6 SNMP InBcastOctets */ 00090 RTNL_LINK_IP6_OUTBCASTOCTETS, /*!< IPv6 SNMP OutBcastOctets */ 00091 RTNL_LINK_ICMP6_INMSGS, /*!< ICMPv6 SNMP InMsgs */ 00092 RTNL_LINK_ICMP6_INERRORS, /*!< ICMPv6 SNMP InErrors */ 00093 RTNL_LINK_ICMP6_OUTMSGS, /*!< ICMPv6 SNMP OutMsgs */ 00094 RTNL_LINK_ICMP6_OUTERRORS, /*!< ICMPv6 SNMP OutErrors */ 00095 __RTNL_LINK_STATS_MAX, 00096 } rtnl_link_stat_id_t; 00097 00098 #define RTNL_LINK_STATS_MAX (__RTNL_LINK_STATS_MAX - 1) 00099 00100 extern struct rtnl_link *rtnl_link_alloc(void); 00101 extern void rtnl_link_put(struct rtnl_link *); 00102 extern void rtnl_link_free(struct rtnl_link *); 00103 00104 extern int rtnl_link_alloc_cache(struct nl_sock *, int, struct nl_cache **); 00105 extern struct rtnl_link *rtnl_link_get(struct nl_cache *, int); 00106 extern struct rtnl_link *rtnl_link_get_by_name(struct nl_cache *, const char *); 00107 00108 00109 extern int rtnl_link_build_add_request(struct rtnl_link *, int, 00110 struct nl_msg **); 00111 extern int rtnl_link_add(struct nl_sock *, struct rtnl_link *, int); 00112 extern int rtnl_link_build_change_request(struct rtnl_link *, 00113 struct rtnl_link *, int, 00114 struct nl_msg **); 00115 extern int rtnl_link_change(struct nl_sock *, struct rtnl_link *, 00116 struct rtnl_link *, int); 00117 00118 extern int rtnl_link_build_delete_request(const struct rtnl_link *, 00119 struct nl_msg **); 00120 extern int rtnl_link_delete(struct nl_sock *, const struct rtnl_link *); 00121 extern int rtnl_link_build_get_request(int, const char *, 00122 struct nl_msg **); 00123 extern int rtnl_link_get_kernel(struct nl_sock *, int, const char *, 00124 struct rtnl_link **); 00125 00126 /* Name <-> Index Translations */ 00127 extern char * rtnl_link_i2name(struct nl_cache *, int, char *, size_t); 00128 extern int rtnl_link_name2i(struct nl_cache *, const char *); 00129 00130 /* Name <-> Statistic Translations */ 00131 extern char * rtnl_link_stat2str(int, char *, size_t); 00132 extern int rtnl_link_str2stat(const char *); 00133 00134 /* Link Flags Translations */ 00135 extern char * rtnl_link_flags2str(int, char *, size_t); 00136 extern int rtnl_link_str2flags(const char *); 00137 00138 extern char * rtnl_link_operstate2str(uint8_t, char *, size_t); 00139 extern int rtnl_link_str2operstate(const char *); 00140 00141 extern char * rtnl_link_mode2str(uint8_t, char *, size_t); 00142 extern int rtnl_link_str2mode(const char *); 00143 00144 /* Access Functions */ 00145 extern void rtnl_link_set_qdisc(struct rtnl_link *, const char *); 00146 extern char * rtnl_link_get_qdisc(struct rtnl_link *); 00147 00148 extern void rtnl_link_set_name(struct rtnl_link *, const char *); 00149 extern char * rtnl_link_get_name(struct rtnl_link *); 00150 00151 extern void rtnl_link_set_flags(struct rtnl_link *, unsigned int); 00152 extern void rtnl_link_unset_flags(struct rtnl_link *, unsigned int); 00153 extern unsigned int rtnl_link_get_flags(struct rtnl_link *); 00154 00155 extern void rtnl_link_set_mtu(struct rtnl_link *, unsigned int); 00156 extern unsigned int rtnl_link_get_mtu(struct rtnl_link *); 00157 00158 extern void rtnl_link_set_txqlen(struct rtnl_link *, unsigned int); 00159 extern unsigned int rtnl_link_get_txqlen(struct rtnl_link *); 00160 00161 extern void rtnl_link_set_ifindex(struct rtnl_link *, int); 00162 extern int rtnl_link_get_ifindex(struct rtnl_link *); 00163 00164 extern void rtnl_link_set_family(struct rtnl_link *, int); 00165 extern int rtnl_link_get_family(struct rtnl_link *); 00166 00167 extern void rtnl_link_set_arptype(struct rtnl_link *, unsigned int); 00168 extern unsigned int rtnl_link_get_arptype(struct rtnl_link *); 00169 00170 extern void rtnl_link_set_addr(struct rtnl_link *, struct nl_addr *); 00171 extern struct nl_addr *rtnl_link_get_addr(struct rtnl_link *); 00172 00173 extern void rtnl_link_set_broadcast(struct rtnl_link *, struct nl_addr *); 00174 extern struct nl_addr *rtnl_link_get_broadcast(struct rtnl_link *); 00175 00176 extern void rtnl_link_set_link(struct rtnl_link *, int); 00177 extern int rtnl_link_get_link(struct rtnl_link *); 00178 00179 extern void rtnl_link_set_master(struct rtnl_link *, int); 00180 extern int rtnl_link_get_master(struct rtnl_link *); 00181 00182 extern void rtnl_link_set_operstate(struct rtnl_link *, uint8_t); 00183 extern uint8_t rtnl_link_get_operstate(struct rtnl_link *); 00184 00185 extern void rtnl_link_set_linkmode(struct rtnl_link *, uint8_t); 00186 extern uint8_t rtnl_link_get_linkmode(struct rtnl_link *); 00187 00188 extern const char * rtnl_link_get_ifalias(struct rtnl_link *); 00189 extern void rtnl_link_set_ifalias(struct rtnl_link *, const char *); 00190 00191 extern int rtnl_link_get_num_vf(struct rtnl_link *, uint32_t *); 00192 00193 extern uint64_t rtnl_link_get_stat(struct rtnl_link *, rtnl_link_stat_id_t); 00194 extern int rtnl_link_set_stat(struct rtnl_link *, rtnl_link_stat_id_t, 00195 const uint64_t); 00196 00197 extern int rtnl_link_set_type(struct rtnl_link *, const char *); 00198 extern char * rtnl_link_get_type(struct rtnl_link *); 00199 00200 extern int rtnl_link_enslave_ifindex(struct nl_sock *, int, int); 00201 extern int rtnl_link_enslave(struct nl_sock *, struct rtnl_link *, 00202 struct rtnl_link *); 00203 extern int rtnl_link_release_ifindex(struct nl_sock *, int); 00204 extern int rtnl_link_release(struct nl_sock *, struct rtnl_link *); 00205 00206 /* deprecated */ 00207 extern int rtnl_link_set_info_type(struct rtnl_link *, const char *) __attribute__((deprecated)); 00208 extern char * rtnl_link_get_info_type(struct rtnl_link *) __attribute__((deprecated)); 00209 extern void rtnl_link_set_weight(struct rtnl_link *, unsigned int) __attribute__((deprecated)); 00210 extern unsigned int rtnl_link_get_weight(struct rtnl_link *) __attribute__((deprecated)); 00211 00212 00213 #ifdef __cplusplus 00214 } 00215 #endif 00216 00217 #endif