40 # include <linux/unistd.h> 41 # include <linux/signal.h> 55 #include <sys/socket.h> 62 #include <linux/types.h> 63 #include <linux/netlink.h> 70 # include <linux/socket.h> 71 # include <linux/in.h> 72 # include <linux/ip.h> 73 # include <linux/tcp.h> 74 # include <linux/udp.h> 75 # include <linux/icmp.h> 76 # include <linux/if_ether.h> 77 # include <linux/if_arp.h> 80 # include <netinet/in.h> 81 # include <netinet/ip.h> 82 # include <netinet/tcp.h> 83 # include <netinet/udp.h> 84 # include <netinet/ip_icmp.h> 85 # include <netinet/if_ether.h> 96 u8 * t = (
u8 *)
"UNKNOWN";
99 #define _(x) case PF_##x: t = (u8 *) #x; break 165 vec_add (s, t, strlen ((
char *) t));
175 struct protoent * p = getprotobynumber (protocol);
177 ASSERT (family == AF_INET);
179 return format (s,
"%s", p->p_name);
181 return format (s,
"%d", protocol);
183 return format (s,
"%d/%d", family, protocol);
193 struct servent * p = getservbyport (port, proto == IPPROTO_UDP ?
"udp" :
"tcp");
196 return format (s,
"%s", p->s_name);
198 return format (s,
"%d", port);
200 return format (s,
"%s/%d", proto == IPPROTO_UDP ?
"udp" :
"tcp", port);
214 s =
format (s,
"%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
219 s =
format (s,
"%02x:%02x:%02x:%02x:%02x:%02x",
220 addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
224 clib_error (
"unsupported address family %d", family);
232 void *
v = va_arg (*args,
void *);
233 struct sockaddr * sa =
v;
235 switch (sa->sa_family)
239 struct sockaddr_in *
i =
v;
250 struct sockaddr_nl * n =
v;
251 s =
format (s,
"KERNEL-NETLINK");
253 s =
format (s,
" (groups 0x%x)", n->nl_groups);
260 s =
format (s,
"sockaddr family %d", sa->sa_family);
269 u8 * p = va_arg (*args,
u8 *);
270 struct iphdr * ip = (
void *) p;
271 struct tcphdr * tcp = (
void *) (ip + 1);
273 s =
format (s,
"tcp %U:%U -> %U:%U",
279 s =
format (s,
", seq 0x%08x -> 0x%08x", tcp->seq, tcp->ack_seq);
280 #define _(f) if (tcp->f) s = format (s, ", " #f); 281 _ (syn); _ (ack); _ (fin); _ (rst); _ (psh); _ (urg);
285 s =
format (s,
", window 0x%04x", tcp->window);
287 s =
format (s,
", urg 0x%04x", tcp->urg_ptr);
294 u8 * p = va_arg (*args,
u8 *);
295 struct iphdr * ip = (
void *) p;
296 struct udphdr * udp = (
void *) (ip + 1);
298 s =
format (s,
"udp %U:%U -> %U:%U",
314 #define _(f,str) case ICMP_##f: s = format (s, str); break; 315 _ (ECHOREPLY,
"echo reply");
316 _ (DEST_UNREACH,
"unreachable");
317 _ (SOURCE_QUENCH,
"source quench");
318 _ (REDIRECT,
"redirect");
319 _ (ECHO,
"echo request");
320 _ (TIME_EXCEEDED,
"time exceeded");
321 _ (PARAMETERPROB,
"parameter problem");
322 _ (TIMESTAMP,
"timestamp request");
323 _ (TIMESTAMPREPLY,
"timestamp reply");
324 _ (INFO_REQUEST,
"information request");
325 _ (INFO_REPLY,
"information reply");
326 _ (ADDRESS,
"address mask request");
327 _ (ADDRESSREPLY,
"address mask reply");
330 s =
format (s,
"unknown type 0x%x", icmp_type);
333 if (icmp_type == ICMP_DEST_UNREACH)
337 #define _(f,str) case ICMP_##f: s = format (s, " " # str); break; 338 _ (NET_UNREACH,
"network");
339 _ (HOST_UNREACH,
"host");
340 _ (PROT_UNREACH,
"protocol");
341 _ (PORT_UNREACH,
"port");
342 _ (FRAG_NEEDED,
": fragmentation needed/DF set");
343 _ (SR_FAILED,
"source route failed");
344 _ (NET_UNKNOWN,
"network unknown");
345 _ (HOST_UNKNOWN,
"host unknown");
346 _ (HOST_ISOLATED,
"host isolated");
347 _ (NET_ANO,
"network: admin. prohibited");
348 _ (HOST_ANO,
"host: admin. prohibited");
349 _ (NET_UNR_TOS,
"network for type-of-service");
350 _ (HOST_UNR_TOS,
"host for type-of-service");
351 _ (PKT_FILTERED,
": packet filtered");
352 _ (PREC_VIOLATION,
"precedence violation");
353 _ (PREC_CUTOFF,
"precedence cut off");
356 s =
format (s,
"unknown code 0x%x", icmp_code);
359 else if (icmp_type == ICMP_REDIRECT)
363 #define _(f,str) case ICMP_##f: s = format (s, " " # str); break; 364 _ (REDIR_NET,
"network");
365 _ (REDIR_HOST,
"host");
366 _ (REDIR_NETTOS,
"network for type-of-service");
367 _ (REDIR_HOSTTOS,
"host for type-of-service");
370 s =
format (s,
"unknown code 0x%x", icmp_code);
373 else if (icmp_type == ICMP_TIME_EXCEEDED)
377 #define _(f,str) case ICMP_##f: s = format (s, " " # str); break; 378 _ (EXC_TTL,
"time-to-live zero in transit");
379 _ (EXC_FRAGTIME,
"time-to-live zero during reassembly");
382 s =
format (s,
"unknown code 0x%x", icmp_code);
397 u8 * p = va_arg (*args,
u8 *);
398 struct iphdr * ip = (
void *) p;
399 icmp4_t * icmp = (
void *) (ip + 1);
400 s =
format (s,
"icmp %U %U -> %U",
412 if (tos & IPTOS_LOWDELAY)
413 s =
format (s,
"minimize-delay, ");
414 if (tos & IPTOS_MINCOST)
415 s =
format (s,
"minimize-cost, ");
416 if (tos & IPTOS_THROUGHPUT)
417 s =
format (s,
"maximize-throughput, ");
418 if (tos & IPTOS_RELIABILITY)
419 s =
format (s,
"maximize-reliability, ");
421 switch (IPTOS_PREC (tos))
423 #define _(x,y) case IPTOS_PREC_##x: s = format (s, y); break 424 _ (NETCONTROL,
"network");
425 _ (INTERNETCONTROL,
"internet");
426 _ (CRITIC_ECP,
"critical");
428 _ (FLASHOVERRIDE,
"flash-override");
429 _ (IMMEDIATE,
"immediate");
430 _ (PRIORITY,
"priority");
431 _ (ROUTINE,
"routine");
440 u8 * p = va_arg (*args,
u8 *);
441 struct iphdr * ip = (
void *) p;
445 if (! f[IPPROTO_TCP])
453 return format (s,
"%U", f[ip->protocol], p);
455 s =
format (s,
"%U: %U -> %U",
463 #define foreach_unix_arphrd_type \ 513 _ (IEEE802_TR, 800) \ 515 _ (IEEE80211_PRISM, 802) \ 516 _ (IEEE80211_RADIOTAP, 803) \ 523 u32 x = va_arg (*args,
u32);
527 #define _(f,n) case ARPHRD_##f: t = #f; break; 538 s =
format (s,
"unknown 0x%x", x);
543 #define foreach_unix_interface_flag \ 572 u32 x = va_arg (*args,
u32);
581 s =
format (s,
"unknown %d", i);
603 char * op =
"unknown";
605 if (a->
ar_pro != ETH_P_IP ||
606 a->
ar_hrd != ARPHRD_ETHER)
611 #define _(f) case ARPOP_##f: op = #f; break; 619 s =
format (s,
"%s %U %U -> %U %U",
635 case 0: t =
"BPDU";
break;
636 #define _(f) case ETH_P_##f: t = #f; break; 663 #ifdef ETH_P_PPP_DISC 694 s =
format (s,
"ether-type 0x%x", type);
700 struct ethhdr * h = va_arg (*args,
struct ethhdr *);
701 uword proto = h->h_proto;
702 u8 * payload = (
void *) (h + 1);
706 if (proto < ETH_DATA_LEN)
709 u8 dsap, ssap, control;
713 ethhdr_802_t * h1 = (
void *) (h + 1);
715 payload = (
void *) (h1 + 1);
720 s =
format (s,
"%U: %U -> %U",
742 if (gethostname (b,
sizeof (buffer)) < 0)
744 return format (s,
"%s", b);
751 char * fmt = va_arg (*args,
char *);
752 struct timeval * tv = va_arg (*args,
struct timeval *);
758 fmt =
"y/m/d H:M:S:F";
762 static struct timeval now;
763 gettimeofday (&now, 0);
769 { msec = 0; tv->tv_sec++; }
772 time_t t = tv->tv_sec;
776 for (f = fmt; *f; f++)
779 char * what_fmt =
"%d";
788 what = 1900 + tm->tm_year;
792 what = tm->tm_mon + 1;
817 s =
format (s, what_fmt, what);
825 u8 * fmt = va_arg (*args,
u8 *);
826 f64 t = va_arg (*args,
f64);
831 tv.tv_usec = 1e6*(t - tv.tv_sec);
841 #define _(x) case x: t = #x; break; 879 return format (s,
"unknown %d", signum);
888 ucontext_t * uc __attribute__((unused));
889 unsigned long * regs = 0;
892 uc = va_arg (*args, ucontext_t *);
894 #if defined (powerpc) 895 regs = &uc->uc_mcontext.uc_regs->gregs[0];
896 #elif defined (powerpc64) 897 regs = &uc->uc_mcontext.uc_regs->gp_regs[0];
898 #elif defined (i386) || defined (__x86_64__) 899 regs = (
void *) &uc->uc_mcontext.gregs[0];
902 #
if defined (powerpc) || defined (powerpc64)
906 #elif defined (__x86_64__) 914 return format (s,
"unsupported");
916 return format (s,
"%p", regs[reg_no]);
922 gid_t *gid = va_arg (*args, gid_t *);
923 struct group *grp = 0;
931 else if (
unformat (input,
"%s", &s))
933 grp = getgrnam ((
char *) s);
sll srl srl sll sra u16x4 i
#define clib_error(format, args...)
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
#define foreach_set_bit(var, mask, body)
#define vec_add(V, E, N)
Add N elements to end of vector V (no header, unspecified alignment)
static f64 unix_time_now(void)
#define vec_free(V)
Free vector's memory (no header).
static word flt_round_nearest(f64 x)