1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef __UTILS_H__ 2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define __UTILS_H__ 1 3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 4aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <asm/types.h> 5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <resolv.h> 656b9406191a15a51320e039df1004967898f304djamal#include <stdlib.h> 7aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 8aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include "libnetlink.h" 9aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include "ll_map.h" 10aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include "rtm_map.h" 11aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 12aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int preferred_family; 13aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int show_stats; 14aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int show_details; 15aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int show_raw; 16aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int resolve_hosts; 17aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int oneline; 1890f93024a0818dc691138d8401721e797004b042shemmingerextern int timestamp; 19aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern char * _SL_; 2064c7956061500611061910067d76512afcd2ddb4Ben Greearextern int max_flush_loops; 21aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 22aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef IPPROTO_ESP 23aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define IPPROTO_ESP 50 24aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif 25aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef IPPROTO_AH 26aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define IPPROTO_AH 51 27aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif 28c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#ifndef IPPROTO_COMP 29c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define IPPROTO_COMP 108 30c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#endif 31bd641cd661527469a9d15c0fa09f19d017c2299forg[shemminger]!nakam#ifndef IPSEC_PROTO_ANY 32bd641cd661527469a9d15c0fa09f19d017c2299forg[shemminger]!nakam#define IPSEC_PROTO_ANY 255 33bd641cd661527469a9d15c0fa09f19d017c2299forg[shemminger]!nakam#endif 34aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define SPRINT_BSIZE 64 36aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define SPRINT_BUF(x) char x[SPRINT_BSIZE] 37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 38aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern void incomplete_command(void) __attribute__((noreturn)); 39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 40aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define NEXT_ARG() do { argv++; if (--argc <= 0) incomplete_command(); } while(0) 41c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define NEXT_ARG_OK() (argc - 1 > 0) 42c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger#define PREV_ARG() do { argv--; argc++; } while(0) 43aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 44aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingertypedef struct 45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 46aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger __u8 family; 47aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger __u8 bytelen; 48aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger __s16 bitlen; 49f082b64fb40b467bc1f9e5d245114aae4e256d5cnet[shemminger]!shemminger __u32 flags; 507f71c0cae2db61890474e04ba3a26e40219e5561Olivier Fourdan __u32 data[8]; 51aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger} inet_prefix; 52aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 53f082b64fb40b467bc1f9e5d245114aae4e256d5cnet[shemminger]!shemminger#define PREFIXLEN_SPECIFIED 1 54f082b64fb40b467bc1f9e5d245114aae4e256d5cnet[shemminger]!shemminger 55aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define DN_MAXADDL 20 56aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef AF_DECnet 57aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define AF_DECnet 12 58aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif 59aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 60ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemmingerstruct dn_naddr 61aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 62aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger unsigned short a_len; 63aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger unsigned char a_addr[DN_MAXADDL]; 64aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}; 65aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 66aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define IPX_NODE_LEN 6 67aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 68aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstruct ipx_addr { 69aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger u_int32_t ipx_net; 70aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger u_int8_t ipx_node[IPX_NODE_LEN]; 71aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}; 72aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 73c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerextern __u32 get_addr32(const char *name); 7404457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_addr_1(inet_prefix *dst, const char *arg, int family); 75fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemmingerextern int get_prefix_1(inet_prefix *dst, char *arg, int family); 76c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerextern int get_addr(inet_prefix *dst, const char *arg, int family); 77fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemmingerextern int get_prefix(inet_prefix *dst, char *arg, int family); 786b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemmingerextern int mask2bits(__u32 netmask); 79aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 8004457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_integer(int *val, const char *arg, int base); 8104457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_unsigned(unsigned *val, const char *arg, int base); 8281d03dc356df24d55443535eace247b93ff47b4eGerrit Renkerextern int get_time_rtt(unsigned *val, const char *arg, int *raw); 83aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define get_byte get_u8 84aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define get_ushort get_u16 85aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define get_short get_s16 86c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingerextern int get_u64(__u64 *val, const char *arg, int base); 8704457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_u32(__u32 *val, const char *arg, int base); 8830d10db5667d3ca86917ca86c1a65cfcc45965f9Hagen Paul Pfeiferextern int get_s32(__s32 *val, const char *arg, int base); 8904457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_u16(__u16 *val, const char *arg, int base); 9004457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_s16(__s16 *val, const char *arg, int base); 9104457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_u8(__u8 *val, const char *arg, int base); 9204457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int get_s8(__s8 *val, const char *arg, int base); 93aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 94f332d169246447bd5e258ac03d5ee840a70adb1eshemmingerextern char* hexstring_n2a(const __u8 *str, int len, char *buf, int blen); 95f332d169246447bd5e258ac03d5ee840a70adb1eshemmingerextern __u8* hexstring_a2n(const char *str, __u8 *buf, int blen); 96aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 97ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemmingerextern const char *format_host(int af, int len, const void *addr, 9804457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemminger char *buf, int buflen); 99ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemmingerextern const char *rt_addr_n2a(int af, int len, const void *addr, 10004457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemminger char *buf, int buflen); 101aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 102c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemmingervoid missarg(const char *) __attribute__((noreturn)); 10304457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingervoid invarg(const char *, const char *) __attribute__((noreturn)); 10404457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingervoid duparg(const char *, const char *) __attribute__((noreturn)); 10504457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingervoid duparg2(const char *, const char *) __attribute__((noreturn)); 10604457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerint matches(const char *arg, const char *pattern); 10704457b3dcb374ab7cd292ca84e8e73659601ffa1osdl.org!shemmingerextern int inet_addr_match(const inet_prefix *a, const inet_prefix *b, int bits); 108aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 109aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerconst char *dnet_ntop(int af, const void *addr, char *str, size_t len); 110aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerint dnet_pton(int af, const char *src, void *addr); 111aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 112aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerconst char *ipx_ntop(int af, const void *addr, char *str, size_t len); 113aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerint ipx_pton(int af, const char *src, void *addr); 114aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 115aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int __iproute2_hz_internal; 116aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerextern int __get_hz(void); 117aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 118aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic __inline__ int get_hz(void) 119aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 120aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (__iproute2_hz_internal == 0) 121aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger __iproute2_hz_internal = __get_hz(); 122aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return __iproute2_hz_internal; 123aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger} 124aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 1255e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemmingerextern int __iproute2_user_hz_internal; 1265e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemmingerextern int __get_user_hz(void); 1275e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemminger 1285e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemmingerstatic __inline__ int get_user_hz(void) 1295e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemminger{ 1305e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemminger if (__iproute2_user_hz_internal == 0) 1315e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemminger __iproute2_user_hz_internal = __get_user_hz(); 1325e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemminger return __iproute2_user_hz_internal; 1335e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemminger} 1345e8bc6316b1a6c56598cdb29a737d1d670d74e69net[shemminger]!shemminger 1358cd09e61e349e94c9569d3bc33d5785d1f81961cjamalstatic inline __u32 nl_mgrp(__u32 group) 1368cd09e61e349e94c9569d3bc33d5785d1f81961cjamal{ 13756b9406191a15a51320e039df1004967898f304djamal if (group > 31 ) { 13856b9406191a15a51320e039df1004967898f304djamal fprintf(stderr, "Use setsockopt for this group %d\n", group); 13956b9406191a15a51320e039df1004967898f304djamal exit(-1); 14056b9406191a15a51320e039df1004967898f304djamal } 14156b9406191a15a51320e039df1004967898f304djamal return group ? (1 << (group - 1)) : 0; 1428cd09e61e349e94c9569d3bc33d5785d1f81961cjamal} 1438cd09e61e349e94c9569d3bc33d5785d1f81961cjamal 1448cd09e61e349e94c9569d3bc33d5785d1f81961cjamal 14590f93024a0818dc691138d8401721e797004b042shemmingerint print_timestamp(FILE *fp); 14690f93024a0818dc691138d8401721e797004b042shemminger 14702d2ae55c68d2319260163b76c550f45e1077a63shemminger#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 14802d2ae55c68d2319260163b76c550f45e1077a63shemminger 149351efcde4e62967362a10b29f3b701cfecd7cdfcshemmingerextern int cmdlineno; 150d21e88354b2a42b026384730a767f2108bcf8efeAndreas Henrikssonextern ssize_t getcmdline(char **line, size_t *len, FILE *in); 151351efcde4e62967362a10b29f3b701cfecd7cdfcshemmingerextern int makeargs(char *line, char *argv[], int maxargs); 152351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger 153909dfe2c7ebcfe853b2fe4f995be1c4681d5a2a5Pavel Emelyanovstruct iplink_req; 154909dfe2c7ebcfe853b2fe4f995be1c4681d5a2a5Pavel Emelyanovint iplink_parse(int argc, char **argv, struct iplink_req *req, 155db02608b6f408998ea8c823fb791cead3e574f50Vlad Dogaru char **name, char **type, char **link, char **dev, 156db02608b6f408998ea8c823fb791cead3e574f50Vlad Dogaru int *group); 157aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif /* __UTILS_H__ */ 158