4 * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
29 log_sockaddr(void *vp
)
31 static char buf
[NUM_LOGS
][NI_MAXHOST
];
33 struct sockaddr
*sa
= vp
;
35 round
= (round
+ 1) % NUM_LOGS
;
37 if (getnameinfo(sa
, sockaddr_len(sa
), buf
[round
], NI_MAXHOST
, NULL
, 0,
45 log_in6addr(const struct in6_addr
*addr
)
47 struct sockaddr_in6 sa_in6
;
49 memset(&sa_in6
, 0, sizeof(sa_in6
));
50 #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
51 sa_in6
.sin6_len
= sizeof(sa_in6
);
53 sa_in6
.sin6_family
= AF_INET6
;
54 sa_in6
.sin6_addr
= *addr
;
56 recoverscope(&sa_in6
);
58 return (log_sockaddr(&sa_in6
));
62 log_in6addr_scope(const struct in6_addr
*addr
, ifindex_t ifindex
)
64 struct sockaddr_in6 sa_in6
;
66 memset(&sa_in6
, 0, sizeof(sa_in6
));
67 #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
68 sa_in6
.sin6_len
= sizeof(sa_in6
);
70 sa_in6
.sin6_family
= AF_INET6
;
71 sa_in6
.sin6_addr
= *addr
;
73 addscope(&sa_in6
, ifindex
);
75 return (log_sockaddr(&sa_in6
));
79 log_addr(int af
, const union ldpd_addr
*addr
)
81 static char buf
[NUM_LOGS
][INET6_ADDRSTRLEN
];
86 round
= (round
+ 1) % NUM_LOGS
;
87 if (inet_ntop(AF_INET
, &addr
->v4
, buf
[round
],
88 sizeof(buf
[round
])) == NULL
)
92 return (log_in6addr(&addr
->v6
));
104 log_label(uint32_t label
)
107 static char tfbuf
[TF_BUFS
][TF_LEN
]; /* ring buffer */
116 snprintf(buf
, TF_LEN
, "-");
118 case MPLS_LABEL_IMPLICIT_NULL
:
119 snprintf(buf
, TF_LEN
, "imp-null");
121 case MPLS_LABEL_IPV4_EXPLICIT_NULL
:
122 case MPLS_LABEL_IPV6_EXPLICIT_NULL
:
123 snprintf(buf
, TF_LEN
, "exp-null");
126 snprintf(buf
, TF_LEN
, "%u", label
);
137 static char tfbuf
[TF_BUFS
][TF_LEN
]; /* ring buffer */
139 unsigned int sec
, min
, hrs
, day
, week
;
157 snprintf(buf
, TF_LEN
, "%02uw%01ud%02uh", week
, day
, hrs
);
159 snprintf(buf
, TF_LEN
, "%01ud%02uh%02um", day
, hrs
, min
);
161 snprintf(buf
, TF_LEN
, "%02u:%02u:%02u", hrs
, min
, sec
);
167 log_hello_src(const struct hello_source
*src
)
173 snprintf(buf
, sizeof(buf
), "iface %s",
174 src
->link
.ia
->iface
->name
);
177 snprintf(buf
, sizeof(buf
), "source %s",
178 log_addr(src
->target
->af
, &src
->target
->addr
));
186 log_map(const struct map
*map
)
188 static char buf
[128];
191 case MAP_TYPE_WILDCARD
:
192 if (snprintf(buf
, sizeof(buf
), "wildcard") < 0)
195 case MAP_TYPE_PREFIX
:
196 if (snprintf(buf
, sizeof(buf
), "%s/%u",
197 log_addr(map
->fec
.prefix
.af
, &map
->fec
.prefix
.prefix
),
198 map
->fec
.prefix
.prefixlen
) == -1)
202 if (snprintf(buf
, sizeof(buf
), "pw-id %u group-id %u (%s)",
203 map
->fec
.pwid
.pwid
, map
->fec
.pwid
.group_id
,
204 pw_type_name(map
->fec
.pwid
.type
)) == -1)
207 case MAP_TYPE_TYPED_WCARD
:
208 if (snprintf(buf
, sizeof(buf
), "typed wildcard") < 0)
210 switch (map
->fec
.twcard
.type
) {
211 case MAP_TYPE_PREFIX
:
212 if (snprintf(buf
+ strlen(buf
), sizeof(buf
) -
213 strlen(buf
), " (prefix, address-family %s)",
214 af_name(map
->fec
.twcard
.u
.prefix_af
)) < 0)
218 if (snprintf(buf
+ strlen(buf
), sizeof(buf
) -
219 strlen(buf
), " (pwid, type %s)",
220 pw_type_name(map
->fec
.twcard
.u
.pw_type
)) < 0)
224 if (snprintf(buf
+ strlen(buf
), sizeof(buf
) -
225 strlen(buf
), " (unknown type)") < 0)
238 log_fec(const struct fec
*fec
)
241 union ldpd_addr addr
;
245 addr
.v4
= fec
->u
.ipv4
.prefix
;
246 if (snprintf(buf
, sizeof(buf
), "ipv4 %s/%u",
247 log_addr(AF_INET
, &addr
), fec
->u
.ipv4
.prefixlen
) == -1)
251 addr
.v6
= fec
->u
.ipv6
.prefix
;
252 if (snprintf(buf
, sizeof(buf
), "ipv6 %s/%u",
253 log_addr(AF_INET6
, &addr
), fec
->u
.ipv6
.prefixlen
) == -1)
257 if (snprintf(buf
, sizeof(buf
),
259 fec
->u
.pwid
.pwid
, pw_type_name(fec
->u
.pwid
.type
),
260 inet_ntoa(fec
->u
.pwid
.lsr_id
)) == -1)
289 socket_name(int type
)
292 case LDP_SOCKET_DISC
:
293 return ("discovery");
294 case LDP_SOCKET_EDISC
:
295 return ("extended discovery");
296 case LDP_SOCKET_SESSION
:
304 nbr_state_name(int state
)
307 case NBR_STA_PRESENT
:
309 case NBR_STA_INITIAL
:
310 return ("INITIALIZED");
311 case NBR_STA_OPENREC
:
313 case NBR_STA_OPENSENT
:
316 return ("OPERATIONAL");
323 if_state_name(int state
)
336 if_type_name(enum iface_type type
)
339 case IF_TYPE_POINTOPOINT
:
340 return ("POINTOPOINT");
341 case IF_TYPE_BROADCAST
:
342 return ("BROADCAST");
349 msg_name(uint16_t msg
)
354 case MSG_TYPE_NOTIFICATION
:
355 return ("notification");
359 return ("initialization");
360 case MSG_TYPE_KEEPALIVE
:
361 return ("keepalive");
362 case MSG_TYPE_CAPABILITY
:
363 return ("capability");
366 case MSG_TYPE_ADDRWITHDRAW
:
367 return ("address withdraw");
368 case MSG_TYPE_LABELMAPPING
:
369 return ("label mapping");
370 case MSG_TYPE_LABELREQUEST
:
371 return ("label request");
372 case MSG_TYPE_LABELWITHDRAW
:
373 return ("label withdraw");
374 case MSG_TYPE_LABELRELEASE
:
375 return ("label release");
376 case MSG_TYPE_LABELABORTREQ
:
378 snprintf(buf
, sizeof(buf
), "[%08x]", msg
);
384 status_code_name(uint32_t status
)
392 return ("Bad LDP Identifier");
393 case S_BAD_PROTO_VER
:
394 return ("Bad Protocol Version");
396 return ("Bad PDU Length");
398 return ("Unknown Message Type");
400 return ("Bad Message Length");
402 return ("Unknown TLV");
404 return ("Bad TLV Length");
406 return ("Malformed TLV Value");
408 return ("Hold Timer Expired");
411 case S_LOOP_DETECTED
:
412 return ("Loop Detected");
414 return ("Unknown FEC");
418 return ("No Label Resources");
420 return ("Label Resources Available");
422 return ("Session Rejected, No Hello");
423 case S_PARM_ADV_MODE
:
424 return ("Rejected Advertisement Mode Parameter");
426 return ("Rejected Max PDU Length Parameter");
428 return ("Rejected Label Range Parameter");
429 case S_KEEPALIVE_TMR
:
430 return ("KeepAlive Timer Expired");
432 return ("Label Request Aborted");
434 return ("Missing Message Parameters");
436 return ("Unsupported Address Family");
437 case S_KEEPALIVE_BAD
:
438 return ("Bad KeepAlive Time");
440 return ("Internal Error");
442 return ("Illegal C-Bit");
444 return ("Wrong C-Bit");
445 case S_INCPT_BITRATE
:
446 return ("Incompatible bit-rate");
448 return ("CEP-TDM mis-configuration");
450 return ("PW Status");
452 return ("Unassigned/Unrecognized TAI");
454 return ("Generic Misconfiguration Error");
455 case S_WITHDRAW_MTHD
:
456 return ("Label Withdraw PW Status Method");
457 case S_UNSSUPORTDCAP
:
458 return ("Unsupported Capability");
460 return ("End-of-LIB");
461 case S_TRANS_MISMTCH
:
462 return ("Transport Connection Mismatch");
463 case S_DS_NONCMPLNCE
:
464 return ("Dual-Stack Noncompliance");
466 snprintf(buf
, sizeof(buf
), "[%08x]", status
);
472 pw_type_name(uint16_t pw_type
)
477 case PW_TYPE_ETHERNET_TAGGED
:
478 return ("Eth Tagged");
479 case PW_TYPE_ETHERNET
:
481 case PW_TYPE_WILDCARD
:
484 snprintf(buf
, sizeof(buf
), "[%0x]", pw_type
);