Busybox: Upgrade to 1.21.1 (stable). lsof active.
[tomato.git] / release / src / router / busybox / networking / libiproute / ll_proto.c
blobda2b53cbff611a6cb390ee767dadcb7461f6d6d0
1 /* vi: set sw=4 ts=4: */
2 /*
3 * This program is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU General Public License
5 * as published by the Free Software Foundation; either version
6 * 2 of the License, or (at your option) any later version.
8 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
9 */
11 #include "libbb.h"
12 #include "rt_names.h"
13 #include "utils.h"
15 #include <netinet/if_ether.h>
17 /* Please conditionalize exotic protocols on CONFIG_something */
19 static const uint16_t llproto_ids[] = {
20 #define __PF(f,n) ETH_P_##f,
21 __PF(LOOP,loop)
22 __PF(PUP,pup)
23 #ifdef ETH_P_PUPAT
24 __PF(PUPAT,pupat)
25 #endif
26 __PF(IP,ip)
27 __PF(X25,x25)
28 __PF(ARP,arp)
29 __PF(BPQ,bpq)
30 #ifdef ETH_P_IEEEPUP
31 __PF(IEEEPUP,ieeepup)
32 #endif
33 #ifdef ETH_P_IEEEPUPAT
34 __PF(IEEEPUPAT,ieeepupat)
35 #endif
36 __PF(DEC,dec)
37 __PF(DNA_DL,dna_dl)
38 __PF(DNA_RC,dna_rc)
39 __PF(DNA_RT,dna_rt)
40 __PF(LAT,lat)
41 __PF(DIAG,diag)
42 __PF(CUST,cust)
43 __PF(SCA,sca)
44 __PF(RARP,rarp)
45 __PF(ATALK,atalk)
46 __PF(AARP,aarp)
47 __PF(IPX,ipx)
48 __PF(IPV6,ipv6)
49 #ifdef ETH_P_PPP_DISC
50 __PF(PPP_DISC,ppp_disc)
51 #endif
52 #ifdef ETH_P_PPP_SES
53 __PF(PPP_SES,ppp_ses)
54 #endif
55 #ifdef ETH_P_ATMMPOA
56 __PF(ATMMPOA,atmmpoa)
57 #endif
58 #ifdef ETH_P_ATMFATE
59 __PF(ATMFATE,atmfate)
60 #endif
62 __PF(802_3,802_3)
63 __PF(AX25,ax25)
64 __PF(ALL,all)
65 __PF(802_2,802_2)
66 __PF(SNAP,snap)
67 __PF(DDCMP,ddcmp)
68 __PF(WAN_PPP,wan_ppp)
69 __PF(PPP_MP,ppp_mp)
70 __PF(LOCALTALK,localtalk)
71 __PF(PPPTALK,ppptalk)
72 __PF(TR_802_2,tr_802_2)
73 __PF(MOBITEX,mobitex)
74 __PF(CONTROL,control)
75 __PF(IRDA,irda)
76 #ifdef ETH_P_ECONET
77 __PF(ECONET,econet)
78 #endif
80 0x8100,
81 ETH_P_IP
83 #undef __PF
85 /* Keep declarations above and below in sync! */
87 static const char llproto_names[] =
88 #define __PF(f,n) #n "\0"
89 __PF(LOOP,loop)
90 __PF(PUP,pup)
91 #ifdef ETH_P_PUPAT
92 __PF(PUPAT,pupat)
93 #endif
94 __PF(IP,ip)
95 __PF(X25,x25)
96 __PF(ARP,arp)
97 __PF(BPQ,bpq)
98 #ifdef ETH_P_IEEEPUP
99 __PF(IEEEPUP,ieeepup)
100 #endif
101 #ifdef ETH_P_IEEEPUPAT
102 __PF(IEEEPUPAT,ieeepupat)
103 #endif
104 __PF(DEC,dec)
105 __PF(DNA_DL,dna_dl)
106 __PF(DNA_RC,dna_rc)
107 __PF(DNA_RT,dna_rt)
108 __PF(LAT,lat)
109 __PF(DIAG,diag)
110 __PF(CUST,cust)
111 __PF(SCA,sca)
112 __PF(RARP,rarp)
113 __PF(ATALK,atalk)
114 __PF(AARP,aarp)
115 __PF(IPX,ipx)
116 __PF(IPV6,ipv6)
117 #ifdef ETH_P_PPP_DISC
118 __PF(PPP_DISC,ppp_disc)
119 #endif
120 #ifdef ETH_P_PPP_SES
121 __PF(PPP_SES,ppp_ses)
122 #endif
123 #ifdef ETH_P_ATMMPOA
124 __PF(ATMMPOA,atmmpoa)
125 #endif
126 #ifdef ETH_P_ATMFATE
127 __PF(ATMFATE,atmfate)
128 #endif
130 __PF(802_3,802_3)
131 __PF(AX25,ax25)
132 __PF(ALL,all)
133 __PF(802_2,802_2)
134 __PF(SNAP,snap)
135 __PF(DDCMP,ddcmp)
136 __PF(WAN_PPP,wan_ppp)
137 __PF(PPP_MP,ppp_mp)
138 __PF(LOCALTALK,localtalk)
139 __PF(PPPTALK,ppptalk)
140 __PF(TR_802_2,tr_802_2)
141 __PF(MOBITEX,mobitex)
142 __PF(CONTROL,control)
143 __PF(IRDA,irda)
144 #ifdef ETH_P_ECONET
145 __PF(ECONET,econet)
146 #endif
148 "802.1Q" "\0"
149 "ipv4" "\0"
151 #undef __PF
154 const char* FAST_FUNC ll_proto_n2a(unsigned short id, char *buf, int len)
156 unsigned i;
157 id = ntohs(id);
158 for (i = 0; i < ARRAY_SIZE(llproto_ids); i++) {
159 if (llproto_ids[i] == id)
160 return nth_string(llproto_names, i);
162 snprintf(buf, len, "[%u]", id);
163 return buf;
166 int FAST_FUNC ll_proto_a2n(unsigned short *id, char *buf)
168 unsigned i;
169 const char *name = llproto_names;
170 for (i = 0; i < ARRAY_SIZE(llproto_ids); i++) {
171 if (strcasecmp(name, buf) == 0) {
172 i = llproto_ids[i];
173 goto good;
175 name += strlen(name) + 1;
177 errno = 0;
178 i = bb_strtou(buf, NULL, 0);
179 if (errno || i > 0xffff)
180 return -1;
181 good:
182 *id = htons(i);
183 return 0;