Deleted Added
full compact
print-lldp.c (214478) print-lldp.c (235530)
1/*
2 * Copyright (c) 1998-2007 The TCPDUMP project
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that: (1) source code
6 * distributions retain the above copyright notice and this paragraph
7 * in its entirety, and (2) distributions including binary code include
8 * the above copyright notice and this paragraph in its entirety in
9 * the documentation or other materials provided with the distribution.
10 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
11 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
12 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
13 * FOR A PARTICULAR PURPOSE.
14 *
1/*
2 * Copyright (c) 1998-2007 The TCPDUMP project
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that: (1) source code
6 * distributions retain the above copyright notice and this paragraph
7 * in its entirety, and (2) distributions including binary code include
8 * the above copyright notice and this paragraph in its entirety in
9 * the documentation or other materials provided with the distribution.
10 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
11 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
12 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
13 * FOR A PARTICULAR PURPOSE.
14 *
15 * support for the IEEE Link Discovery Protocol as per 802.1ab
15 * support for the IEEE Link Discovery Protocol as per 802.1AB
16 *
17 * Original code by Hannes Gredler (hannes@juniper.net)
18 * IEEE and TIA extensions by Carles Kishimoto <carles.kishimoto@gmail.com>
16 *
17 * Original code by Hannes Gredler (hannes@juniper.net)
18 * IEEE and TIA extensions by Carles Kishimoto <carles.kishimoto@gmail.com>
19 * DCBX extensions by Kaladhar Musunuru <kaladharm@sourceforge.net>
19 */
20
21#ifndef lint
22static const char rcsid[] _U_ =
23"@(#) $Header: /tcpdump/master/tcpdump/print-lldp.c,v 1.10 2008-03-20 09:30:56 hannes Exp $";
24#endif
25
26#ifdef HAVE_CONFIG_H

--- 510 unchanged lines hidden (view full) ---

537
538static const struct tok lldp_aggregation_values[] = {
539 { LLDP_AGGREGATION_CAPABILTIY, "supported"},
540 { LLDP_AGGREGATION_STATUS, "enabled"},
541 { 0, NULL}
542};
543
544/*
20 */
21
22#ifndef lint
23static const char rcsid[] _U_ =
24"@(#) $Header: /tcpdump/master/tcpdump/print-lldp.c,v 1.10 2008-03-20 09:30:56 hannes Exp $";
25#endif
26
27#ifdef HAVE_CONFIG_H

--- 510 unchanged lines hidden (view full) ---

538
539static const struct tok lldp_aggregation_values[] = {
540 { LLDP_AGGREGATION_CAPABILTIY, "supported"},
541 { LLDP_AGGREGATION_STATUS, "enabled"},
542 { 0, NULL}
543};
544
545/*
546 * DCBX protocol subtypes.
547 */
548#define LLDP_DCBX_SUBTYPE_1 1
549#define LLDP_DCBX_SUBTYPE_2 2
550
551static const struct tok lldp_dcbx_subtype_values[] = {
552 { LLDP_DCBX_SUBTYPE_1, "DCB Capability Exchange Protocol Rev 1" },
553 { LLDP_DCBX_SUBTYPE_2, "DCB Capability Exchange Protocol Rev 1.01" },
554 { 0, NULL}
555};
556
557#define LLDP_DCBX_CONTROL_TLV 1
558#define LLDP_DCBX_PRIORITY_GROUPS_TLV 2
559#define LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV 3
560#define LLDP_DCBX_APPLICATION_TLV 4
561
562/*
545 * Interface numbering subtypes.
546 */
547#define LLDP_INTF_NUMB_IFX_SUBTYPE 2
548#define LLDP_INTF_NUMB_SYSPORT_SUBTYPE 3
549
550static const struct tok lldp_intf_numb_subtype_values[] = {
551 { LLDP_INTF_NUMB_IFX_SUBTYPE, "Interface Index" },
552 { LLDP_INTF_NUMB_SYSPORT_SUBTYPE, "System Port Number" },
553 { 0, NULL}
554};
555
556#define LLDP_INTF_NUM_LEN 5
557
558/*
563 * Interface numbering subtypes.
564 */
565#define LLDP_INTF_NUMB_IFX_SUBTYPE 2
566#define LLDP_INTF_NUMB_SYSPORT_SUBTYPE 3
567
568static const struct tok lldp_intf_numb_subtype_values[] = {
569 { LLDP_INTF_NUMB_IFX_SUBTYPE, "Interface Index" },
570 { LLDP_INTF_NUMB_SYSPORT_SUBTYPE, "System Port Number" },
571 { 0, NULL}
572};
573
574#define LLDP_INTF_NUM_LEN 5
575
576/*
559 * Print IEEE private extensions. (802.1 annex F)
577 * Print IEEE 802.1 private extensions. (802.1AB annex E)
560 */
561static int
578 */
579static int
562lldp_private_8021_print(const u_char *tptr)
580lldp_private_8021_print(const u_char *tptr, u_int tlv_len)
563{
564 int subtype, hexdump = FALSE;
581{
582 int subtype, hexdump = FALSE;
583 u_int sublen;
565
584
585 if (tlv_len < 4) {
586 return hexdump;
587 }
566 subtype = *(tptr+3);
567
568 printf("\n\t %s Subtype (%u)",
569 tok2str(lldp_8021_subtype_values, "unknown", subtype),
570 subtype);
571
572 switch (subtype) {
573 case LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID:
588 subtype = *(tptr+3);
589
590 printf("\n\t %s Subtype (%u)",
591 tok2str(lldp_8021_subtype_values, "unknown", subtype),
592 subtype);
593
594 switch (subtype) {
595 case LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID:
596 if (tlv_len < 6) {
597 return hexdump;
598 }
574 printf("\n\t port vlan id (PVID): %u",
575 EXTRACT_16BITS(tptr+4));
576 break;
577 case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID:
599 printf("\n\t port vlan id (PVID): %u",
600 EXTRACT_16BITS(tptr+4));
601 break;
602 case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID:
603 if (tlv_len < 7) {
604 return hexdump;
605 }
578 printf("\n\t port and protocol vlan id (PPVID): %u, flags [%s] (0x%02x)",
579 EXTRACT_16BITS(tptr+5),
580 bittok2str(lldp_8021_port_protocol_id_values, "none", *(tptr+4)),
581 *(tptr+4));
582 break;
583 case LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME:
606 printf("\n\t port and protocol vlan id (PPVID): %u, flags [%s] (0x%02x)",
607 EXTRACT_16BITS(tptr+5),
608 bittok2str(lldp_8021_port_protocol_id_values, "none", *(tptr+4)),
609 *(tptr+4));
610 break;
611 case LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME:
612 if (tlv_len < 6) {
613 return hexdump;
614 }
584 printf("\n\t vlan id (VID): %u",
585 EXTRACT_16BITS(tptr+4));
615 printf("\n\t vlan id (VID): %u",
616 EXTRACT_16BITS(tptr+4));
617 if (tlv_len < 7) {
618 return hexdump;
619 }
620 sublen = *(tptr+6);
621 if (tlv_len < 7+sublen) {
622 return hexdump;
623 }
586 printf("\n\t vlan name: ");
624 printf("\n\t vlan name: ");
587 safeputs((const char *)tptr+7, *(tptr+6));
625 safeputs((const char *)tptr+7, sublen);
588 break;
589 case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY:
626 break;
627 case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY:
628 if (tlv_len < 5) {
629 return hexdump;
630 }
631 sublen = *(tptr+4);
632 if (tlv_len < 5+sublen) {
633 return hexdump;
634 }
590 printf("\n\t protocol identity: ");
635 printf("\n\t protocol identity: ");
591 safeputs((const char *)tptr+5, *(tptr+4));
636 safeputs((const char *)tptr+5, sublen);
592 break;
593
594 default:
595 hexdump = TRUE;
596 break;
597 }
598
599 return hexdump;
600}
601
602/*
637 break;
638
639 default:
640 hexdump = TRUE;
641 break;
642 }
643
644 return hexdump;
645}
646
647/*
603 * Print IEEE private extensions. (802.3)
648 * Print IEEE 802.3 private extensions. (802.3bc)
604 */
605static int
649 */
650static int
606lldp_private_8023_print(const u_char *tptr)
651lldp_private_8023_print(const u_char *tptr, u_int tlv_len)
607{
608 int subtype, hexdump = FALSE;
609
652{
653 int subtype, hexdump = FALSE;
654
655 if (tlv_len < 4) {
656 return hexdump;
657 }
610 subtype = *(tptr+3);
611
612 printf("\n\t %s Subtype (%u)",
613 tok2str(lldp_8023_subtype_values, "unknown", subtype),
614 subtype);
615
616 switch (subtype) {
617 case LLDP_PRIVATE_8023_SUBTYPE_MACPHY:
658 subtype = *(tptr+3);
659
660 printf("\n\t %s Subtype (%u)",
661 tok2str(lldp_8023_subtype_values, "unknown", subtype),
662 subtype);
663
664 switch (subtype) {
665 case LLDP_PRIVATE_8023_SUBTYPE_MACPHY:
666 if (tlv_len < 9) {
667 return hexdump;
668 }
618 printf("\n\t autonegotiation [%s] (0x%02x)",
619 bittok2str(lldp_8023_autonegotiation_values, "none", *(tptr+4)),
620 *(tptr+4));
621 printf("\n\t PMD autoneg capability [%s] (0x%04x)",
622 bittok2str(lldp_pmd_capability_values,"unknown", EXTRACT_16BITS(tptr+5)),
623 EXTRACT_16BITS(tptr+5));
624 printf("\n\t MAU type %s (0x%04x)",
625 tok2str(lldp_mau_types_values, "unknown", EXTRACT_16BITS(tptr+7)),
626 EXTRACT_16BITS(tptr+7));
627 break;
628
629 case LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER:
669 printf("\n\t autonegotiation [%s] (0x%02x)",
670 bittok2str(lldp_8023_autonegotiation_values, "none", *(tptr+4)),
671 *(tptr+4));
672 printf("\n\t PMD autoneg capability [%s] (0x%04x)",
673 bittok2str(lldp_pmd_capability_values,"unknown", EXTRACT_16BITS(tptr+5)),
674 EXTRACT_16BITS(tptr+5));
675 printf("\n\t MAU type %s (0x%04x)",
676 tok2str(lldp_mau_types_values, "unknown", EXTRACT_16BITS(tptr+7)),
677 EXTRACT_16BITS(tptr+7));
678 break;
679
680 case LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER:
681 if (tlv_len < 7) {
682 return hexdump;
683 }
630 printf("\n\t MDI power support [%s], power pair %s, power class %s",
631 bittok2str(lldp_mdi_values, "none", *(tptr+4)),
632 tok2str(lldp_mdi_power_pairs_values, "unknown", *(tptr+5)),
633 tok2str(lldp_mdi_power_class_values, "unknown", *(tptr+6)));
634 break;
635
636 case LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR:
684 printf("\n\t MDI power support [%s], power pair %s, power class %s",
685 bittok2str(lldp_mdi_values, "none", *(tptr+4)),
686 tok2str(lldp_mdi_power_pairs_values, "unknown", *(tptr+5)),
687 tok2str(lldp_mdi_power_class_values, "unknown", *(tptr+6)));
688 break;
689
690 case LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR:
691 if (tlv_len < 9) {
692 return hexdump;
693 }
637 printf("\n\t aggregation status [%s], aggregation port ID %u",
638 bittok2str(lldp_aggregation_values, "none", *(tptr+4)),
639 EXTRACT_32BITS(tptr+5));
640 break;
641
642 case LLDP_PRIVATE_8023_SUBTYPE_MTU:
643 printf("\n\t MTU size %u", EXTRACT_16BITS(tptr+4));
644 break;

--- 24 unchanged lines hidden (view full) ---

669 * Print private TIA extensions.
670 */
671static int
672lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
673{
674 int subtype, hexdump = FALSE;
675 u_int8_t location_format;
676 u_int16_t power_val;
694 printf("\n\t aggregation status [%s], aggregation port ID %u",
695 bittok2str(lldp_aggregation_values, "none", *(tptr+4)),
696 EXTRACT_32BITS(tptr+5));
697 break;
698
699 case LLDP_PRIVATE_8023_SUBTYPE_MTU:
700 printf("\n\t MTU size %u", EXTRACT_16BITS(tptr+4));
701 break;

--- 24 unchanged lines hidden (view full) ---

726 * Print private TIA extensions.
727 */
728static int
729lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
730{
731 int subtype, hexdump = FALSE;
732 u_int8_t location_format;
733 u_int16_t power_val;
677 u_int8_t lci_len, ca_type, ca_len;
734 u_int lci_len;
735 u_int8_t ca_type, ca_len;
678
736
737 if (tlv_len < 4) {
738 return hexdump;
739 }
679 subtype = *(tptr+3);
680
681 printf("\n\t %s Subtype (%u)",
682 tok2str(lldp_tia_subtype_values, "unknown", subtype),
683 subtype);
684
685 switch (subtype) {
686 case LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES:
740 subtype = *(tptr+3);
741
742 printf("\n\t %s Subtype (%u)",
743 tok2str(lldp_tia_subtype_values, "unknown", subtype),
744 subtype);
745
746 switch (subtype) {
747 case LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES:
748 if (tlv_len < 7) {
749 return hexdump;
750 }
687 printf("\n\t Media capabilities [%s] (0x%04x)",
688 bittok2str(lldp_tia_capabilities_values, "none",
689 EXTRACT_16BITS(tptr+4)), EXTRACT_16BITS(tptr+4));
690 printf("\n\t Device type [%s] (0x%02x)",
691 tok2str(lldp_tia_device_type_values, "unknown", *(tptr+6)),
692 *(tptr+6));
693 break;
694
695 case LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY:
751 printf("\n\t Media capabilities [%s] (0x%04x)",
752 bittok2str(lldp_tia_capabilities_values, "none",
753 EXTRACT_16BITS(tptr+4)), EXTRACT_16BITS(tptr+4));
754 printf("\n\t Device type [%s] (0x%02x)",
755 tok2str(lldp_tia_device_type_values, "unknown", *(tptr+6)),
756 *(tptr+6));
757 break;
758
759 case LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY:
760 if (tlv_len < 8) {
761 return hexdump;
762 }
696 printf("\n\t Application type [%s] (0x%02x)",
697 tok2str(lldp_tia_application_type_values, "none", *(tptr+4)),
698 *(tptr+4));
699 printf(", Flags [%s]", bittok2str(
700 lldp_tia_network_policy_bits_values, "none", *(tptr+5)));
701 printf("\n\t Vlan id %u",
702 LLDP_EXTRACT_NETWORK_POLICY_VLAN(EXTRACT_16BITS(tptr+5)));
703 printf(", L2 priority %u",
704 LLDP_EXTRACT_NETWORK_POLICY_L2_PRIORITY(EXTRACT_16BITS(tptr+6)));
705 printf(", DSCP value %u",
706 LLDP_EXTRACT_NETWORK_POLICY_DSCP(EXTRACT_16BITS(tptr+6)));
707 break;
708
709 case LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID:
763 printf("\n\t Application type [%s] (0x%02x)",
764 tok2str(lldp_tia_application_type_values, "none", *(tptr+4)),
765 *(tptr+4));
766 printf(", Flags [%s]", bittok2str(
767 lldp_tia_network_policy_bits_values, "none", *(tptr+5)));
768 printf("\n\t Vlan id %u",
769 LLDP_EXTRACT_NETWORK_POLICY_VLAN(EXTRACT_16BITS(tptr+5)));
770 printf(", L2 priority %u",
771 LLDP_EXTRACT_NETWORK_POLICY_L2_PRIORITY(EXTRACT_16BITS(tptr+6)));
772 printf(", DSCP value %u",
773 LLDP_EXTRACT_NETWORK_POLICY_DSCP(EXTRACT_16BITS(tptr+6)));
774 break;
775
776 case LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID:
777 if (tlv_len < 5) {
778 return hexdump;
779 }
710 location_format = *(tptr+4);
711 printf("\n\t Location data format %s (0x%02x)",
712 tok2str(lldp_tia_location_data_format_values, "unknown", location_format),
713 location_format);
714
715 switch (location_format) {
716 case LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED:
780 location_format = *(tptr+4);
781 printf("\n\t Location data format %s (0x%02x)",
782 tok2str(lldp_tia_location_data_format_values, "unknown", location_format),
783 location_format);
784
785 switch (location_format) {
786 case LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED:
787 if (tlv_len < 21) {
788 return hexdump;
789 }
717 printf("\n\t Latitude resolution %u, latitude value %" PRIu64,
718 (*(tptr+5)>>2), lldp_extract_latlon(tptr+5));
719 printf("\n\t Longitude resolution %u, longitude value %" PRIu64,
720 (*(tptr+10)>>2), lldp_extract_latlon(tptr+10));
721 printf("\n\t Altitude type %s (%u)",
722 tok2str(lldp_tia_location_altitude_type_values, "unknown",(*(tptr+15)>>4)),
723 (*(tptr+15)>>4));
724 printf("\n\t Altitude resolution %u, altitude value 0x%x",
725 (EXTRACT_16BITS(tptr+15)>>6)&0x3f,
726 ((EXTRACT_32BITS(tptr+16)&0x3fffffff)));
727 printf("\n\t Datum %s (0x%02x)",
728 tok2str(lldp_tia_location_datum_type_values, "unknown", *(tptr+20)),
729 *(tptr+20));
730 break;
731
732 case LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS:
790 printf("\n\t Latitude resolution %u, latitude value %" PRIu64,
791 (*(tptr+5)>>2), lldp_extract_latlon(tptr+5));
792 printf("\n\t Longitude resolution %u, longitude value %" PRIu64,
793 (*(tptr+10)>>2), lldp_extract_latlon(tptr+10));
794 printf("\n\t Altitude type %s (%u)",
795 tok2str(lldp_tia_location_altitude_type_values, "unknown",(*(tptr+15)>>4)),
796 (*(tptr+15)>>4));
797 printf("\n\t Altitude resolution %u, altitude value 0x%x",
798 (EXTRACT_16BITS(tptr+15)>>6)&0x3f,
799 ((EXTRACT_32BITS(tptr+16)&0x3fffffff)));
800 printf("\n\t Datum %s (0x%02x)",
801 tok2str(lldp_tia_location_datum_type_values, "unknown", *(tptr+20)),
802 *(tptr+20));
803 break;
804
805 case LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS:
806 if (tlv_len < 6) {
807 return hexdump;
808 }
733 lci_len = *(tptr+5);
809 lci_len = *(tptr+5);
810 if (lci_len < 3) {
811 return hexdump;
812 }
813 if (tlv_len < 7+lci_len) {
814 return hexdump;
815 }
734 printf("\n\t LCI length %u, LCI what %s (0x%02x), Country-code ",
735 lci_len,
736 tok2str(lldp_tia_location_lci_what_values, "unknown", *(tptr+6)),
737 *(tptr+6));
738
739 /* Country code */
740 safeputs((const char *)(tptr+7), 2);
741
742 lci_len = lci_len-3;
743 tptr = tptr + 9;
744
745 /* Decode each civic address element */
746 while (lci_len > 0) {
816 printf("\n\t LCI length %u, LCI what %s (0x%02x), Country-code ",
817 lci_len,
818 tok2str(lldp_tia_location_lci_what_values, "unknown", *(tptr+6)),
819 *(tptr+6));
820
821 /* Country code */
822 safeputs((const char *)(tptr+7), 2);
823
824 lci_len = lci_len-3;
825 tptr = tptr + 9;
826
827 /* Decode each civic address element */
828 while (lci_len > 0) {
829 if (lci_len < 2) {
830 return hexdump;
831 }
747 ca_type = *(tptr);
748 ca_len = *(tptr+1);
749
750 tptr += 2;
751 lci_len -= 2;
752
753 printf("\n\t CA type \'%s\' (%u), length %u: ",
754 tok2str(lldp_tia_location_lci_catype_values, "unknown", ca_type),
755 ca_type, ca_len);
756
757 /* basic sanity check */
758 if ( ca_type == 0 || ca_len == 0) {
759 return hexdump;
760 }
832 ca_type = *(tptr);
833 ca_len = *(tptr+1);
834
835 tptr += 2;
836 lci_len -= 2;
837
838 printf("\n\t CA type \'%s\' (%u), length %u: ",
839 tok2str(lldp_tia_location_lci_catype_values, "unknown", ca_type),
840 ca_type, ca_len);
841
842 /* basic sanity check */
843 if ( ca_type == 0 || ca_len == 0) {
844 return hexdump;
845 }
846 if (lci_len < ca_len) {
847 return hexdump;
848 }
761
762 safeputs((const char *)tptr, ca_len);
763 tptr += ca_len;
764 lci_len -= ca_len;
765 }
766 break;
767
768 case LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN:
769 printf("\n\t ECS ELIN id ");
770 safeputs((const char *)tptr+5, tlv_len-5);
771 break;
772
773 default:
774 printf("\n\t Location ID ");
775 print_unknown_data(tptr+5, "\n\t ", tlv_len-5);
776 }
777 break;
778
779 case LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI:
849
850 safeputs((const char *)tptr, ca_len);
851 tptr += ca_len;
852 lci_len -= ca_len;
853 }
854 break;
855
856 case LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN:
857 printf("\n\t ECS ELIN id ");
858 safeputs((const char *)tptr+5, tlv_len-5);
859 break;
860
861 default:
862 printf("\n\t Location ID ");
863 print_unknown_data(tptr+5, "\n\t ", tlv_len-5);
864 }
865 break;
866
867 case LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI:
868 if (tlv_len < 7) {
869 return hexdump;
870 }
780 printf("\n\t Power type [%s]",
781 (*(tptr+4)&0xC0>>6) ? "PD device" : "PSE device");
782 printf(", Power source [%s]",
783 tok2str(lldp_tia_power_source_values, "none", (*(tptr+4)&0x30)>>4));
784 printf("\n\t Power priority [%s] (0x%02x)",
785 tok2str(lldp_tia_power_priority_values, "none", *(tptr+4)&0x0f),
786 *(tptr+4)&0x0f);
787 power_val = EXTRACT_16BITS(tptr+5);

--- 19 unchanged lines hidden (view full) ---

807 default:
808 hexdump = TRUE;
809 break;
810 }
811
812 return hexdump;
813}
814
871 printf("\n\t Power type [%s]",
872 (*(tptr+4)&0xC0>>6) ? "PD device" : "PSE device");
873 printf(", Power source [%s]",
874 tok2str(lldp_tia_power_source_values, "none", (*(tptr+4)&0x30)>>4));
875 printf("\n\t Power priority [%s] (0x%02x)",
876 tok2str(lldp_tia_power_priority_values, "none", *(tptr+4)&0x0f),
877 *(tptr+4)&0x0f);
878 power_val = EXTRACT_16BITS(tptr+5);

--- 19 unchanged lines hidden (view full) ---

898 default:
899 hexdump = TRUE;
900 break;
901 }
902
903 return hexdump;
904}
905
906/*
907 * Print DCBX Protocol fields (V 1.01).
908 */
909static int
910lldp_private_dcbx_print(const u_char *pptr, u_int len)
911{
912 int subtype, hexdump = FALSE;
913 u_int8_t tval;
914 u_int16_t tlv;
915 u_int32_t i, pgval, uval;
916 u_int tlen, tlv_type, tlv_len;
917 const u_char *tptr, *mptr;
918
919 if (len < 4) {
920 return hexdump;
921 }
922 subtype = *(pptr+3);
923
924 printf("\n\t %s Subtype (%u)",
925 tok2str(lldp_dcbx_subtype_values, "unknown", subtype),
926 subtype);
927
928 /* by passing old version */
929 if (subtype == LLDP_DCBX_SUBTYPE_1)
930 return TRUE;
931
932 tptr = pptr + 4;
933 tlen = len - 4;
934
935 while (tlen >= sizeof(tlv)) {
936
937 TCHECK2(*tptr, sizeof(tlv));
938
939 tlv = EXTRACT_16BITS(tptr);
940
941 tlv_type = LLDP_EXTRACT_TYPE(tlv);
942 tlv_len = LLDP_EXTRACT_LEN(tlv);
943 hexdump = FALSE;
944
945 tlen -= sizeof(tlv);
946 tptr += sizeof(tlv);
947
948 /* loop check */
949 if (!tlv_type || !tlv_len) {
950 break;
951 }
952
953 TCHECK2(*tptr, tlv_len);
954 if (tlen < tlv_len) {
955 goto trunc;
956 }
957
958 /* decode every tlv */
959 switch (tlv_type) {
960 case LLDP_DCBX_CONTROL_TLV:
961 if (tlv_len < 10) {
962 goto trunc;
963 }
964 printf("\n\t Control - Protocol Control (type 0x%x, length %d)",
965 LLDP_DCBX_CONTROL_TLV, tlv_len);
966 printf("\n\t Oper_Version: %d", *tptr);
967 printf("\n\t Max_Version: %d", *(tptr+1));
968 printf("\n\t Sequence Number: %d", EXTRACT_32BITS(tptr+2));
969 printf("\n\t Acknowledgement Number: %d",
970 EXTRACT_32BITS(tptr+6));
971 break;
972 case LLDP_DCBX_PRIORITY_GROUPS_TLV:
973 if (tlv_len < 17) {
974 goto trunc;
975 }
976 printf("\n\t Feature - Priority Group (type 0x%x, length %d)",
977 LLDP_DCBX_PRIORITY_GROUPS_TLV, tlv_len);
978 printf("\n\t Oper_Version: %d", *tptr);
979 printf("\n\t Max_Version: %d", *(tptr+1));
980 printf("\n\t Info block(0x%02X): ", *(tptr+2));
981 tval = *(tptr+2);
982 printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
983 (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
984 (tval & 0x20) ? 1 : 0);
985 printf("\n\t SubType: %d", *(tptr+3));
986 printf("\n\t Priority Allocation");
987
988 pgval = EXTRACT_32BITS(tptr+4);
989 for (i = 0; i <= 7; i++) {
990 tval = *(tptr+4+(i/2));
991 printf("\n\t PgId_%d: %d",
992 i, (pgval >> (28-4*i)) & 0xF);
993 }
994 printf("\n\t Priority Group Allocation");
995 for (i = 0; i <= 7; i++)
996 printf("\n\t Pg percentage[%d]: %d", i, *(tptr+8+i));
997 printf("\n\t NumTCsSupported: %d", *(tptr+8+8));
998 break;
999 case LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV:
1000 if (tlv_len < 6) {
1001 goto trunc;
1002 }
1003 printf("\n\t Feature - Priority Flow Control");
1004 printf(" (type 0x%x, length %d)",
1005 LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV, tlv_len);
1006 printf("\n\t Oper_Version: %d", *tptr);
1007 printf("\n\t Max_Version: %d", *(tptr+1));
1008 printf("\n\t Info block(0x%02X): ", *(tptr+2));
1009 tval = *(tptr+2);
1010 printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
1011 (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
1012 (tval & 0x20) ? 1 : 0);
1013 printf("\n\t SubType: %d", *(tptr+3));
1014 tval = *(tptr+4);
1015 printf("\n\t PFC Config (0x%02X)", *(tptr+4));
1016 for (i = 0; i <= 7; i++)
1017 printf("\n\t Priority Bit %d: %s",
1018 i, (tval & (1 << i)) ? "Enabled" : "Disabled");
1019 printf("\n\t NumTCPFCSupported: %d", *(tptr+5));
1020 break;
1021 case LLDP_DCBX_APPLICATION_TLV:
1022 if (tlv_len < 4) {
1023 goto trunc;
1024 }
1025 printf("\n\t Feature - Application (type 0x%x, length %d)",
1026 LLDP_DCBX_APPLICATION_TLV, tlv_len);
1027 printf("\n\t Oper_Version: %d", *tptr);
1028 printf("\n\t Max_Version: %d", *(tptr+1));
1029 printf("\n\t Info block(0x%02X): ", *(tptr+2));
1030 tval = *(tptr+2);
1031 printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
1032 (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
1033 (tval & 0x20) ? 1 : 0);
1034 printf("\n\t SubType: %d", *(tptr+3));
1035 tval = tlv_len - 4;
1036 mptr = tptr + 4;
1037 while (tval >= 6) {
1038 printf("\n\t Application Value");
1039 printf("\n\t Application Protocol ID: 0x%04x",
1040 EXTRACT_16BITS(mptr));
1041 uval = EXTRACT_24BITS(mptr+2);
1042 printf("\n\t SF (0x%x) Application Protocol ID is %s",
1043 (uval >> 22),
1044 (uval >> 22) ? "Socket Number" : "L2 EtherType");
1045 printf("\n\t OUI: 0x%06x", uval & 0x3fffff);
1046 printf("\n\t User Priority Map: 0x%02x", *(mptr+5));
1047 tval = tval - 6;
1048 mptr = mptr + 6;
1049 }
1050 break;
1051 default:
1052 hexdump = TRUE;
1053 break;
1054 }
1055
1056 /* do we also want to see a hex dump ? */
1057 if (vflag > 1 || (vflag && hexdump)) {
1058 print_unknown_data(tptr,"\n\t ", tlv_len);
1059 }
1060
1061 tlen -= tlv_len;
1062 tptr += tlv_len;
1063 }
1064
1065 trunc:
1066 return hexdump;
1067}
1068
815static char *
1069static char *
816lldp_network_addr_print(const u_char *tptr) {
1070lldp_network_addr_print(const u_char *tptr, u_int len) {
817
818 u_int8_t af;
819 static char buf[BUFSIZE];
820 const char * (*pfunc)(const u_char *);
821
1071
1072 u_int8_t af;
1073 static char buf[BUFSIZE];
1074 const char * (*pfunc)(const u_char *);
1075
1076 if (len < 1)
1077 return NULL;
1078 len--;
822 af = *tptr;
823 switch (af) {
824 case AFNUM_INET:
1079 af = *tptr;
1080 switch (af) {
1081 case AFNUM_INET:
1082 if (len < 4)
1083 return NULL;
825 pfunc = getname;
826 break;
827#ifdef INET6
828 case AFNUM_INET6:
1084 pfunc = getname;
1085 break;
1086#ifdef INET6
1087 case AFNUM_INET6:
1088 if (len < 16)
1089 return NULL;
829 pfunc = getname6;
830 break;
831#endif
832 case AFNUM_802:
1090 pfunc = getname6;
1091 break;
1092#endif
1093 case AFNUM_802:
1094 if (len < 6)
1095 return NULL;
833 pfunc = etheraddr_string;
834 break;
835 default:
836 pfunc = NULL;
837 break;
838 }
839
840 if (!pfunc) {

--- 8 unchanged lines hidden (view full) ---

849}
850
851static int
852lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
853
854 u_int8_t mgmt_addr_len, intf_num_subtype, oid_len;
855 const u_char *tptr;
856 u_int tlen;
1096 pfunc = etheraddr_string;
1097 break;
1098 default:
1099 pfunc = NULL;
1100 break;
1101 }
1102
1103 if (!pfunc) {

--- 8 unchanged lines hidden (view full) ---

1112}
1113
1114static int
1115lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
1116
1117 u_int8_t mgmt_addr_len, intf_num_subtype, oid_len;
1118 const u_char *tptr;
1119 u_int tlen;
1120 char *mgmt_addr;
857
858 tlen = len;
859 tptr = pptr;
860
1121
1122 tlen = len;
1123 tptr = pptr;
1124
1125 if (tlen < 1) {
1126 return 0;
1127 }
861 mgmt_addr_len = *tptr++;
862 tlen--;
863
864 if (tlen < mgmt_addr_len) {
865 return 0;
866 }
867
1128 mgmt_addr_len = *tptr++;
1129 tlen--;
1130
1131 if (tlen < mgmt_addr_len) {
1132 return 0;
1133 }
1134
1135 mgmt_addr = lldp_network_addr_print(tptr, mgmt_addr_len);
1136 if (mgmt_addr == NULL) {
1137 return 0;
1138 }
868 printf("\n\t Management Address length %u, %s",
1139 printf("\n\t Management Address length %u, %s",
869 mgmt_addr_len,
870 lldp_network_addr_print(tptr));
1140 mgmt_addr_len, mgmt_addr);
871 tptr += mgmt_addr_len;
872 tlen -= mgmt_addr_len;
873
874 if (tlen < LLDP_INTF_NUM_LEN) {
875 return 0;
876 }
877
878 intf_num_subtype = *tptr;

--- 6 unchanged lines hidden (view full) ---

885 tlen -= LLDP_INTF_NUM_LEN;
886
887 /*
888 * The OID is optional.
889 */
890 if (tlen) {
891 oid_len = *tptr;
892
1141 tptr += mgmt_addr_len;
1142 tlen -= mgmt_addr_len;
1143
1144 if (tlen < LLDP_INTF_NUM_LEN) {
1145 return 0;
1146 }
1147
1148 intf_num_subtype = *tptr;

--- 6 unchanged lines hidden (view full) ---

1155 tlen -= LLDP_INTF_NUM_LEN;
1156
1157 /*
1158 * The OID is optional.
1159 */
1160 if (tlen) {
1161 oid_len = *tptr;
1162
1163 if (tlen < oid_len) {
1164 return 0;
1165 }
893 if (oid_len) {
894 printf("\n\t OID length %u", oid_len);
895 safeputs((const char *)tptr+1, oid_len);
896 }
897 }
898
899 return 1;
900}
901
902void
903lldp_print(register const u_char *pptr, register u_int len) {
904
905 u_int8_t subtype;
906 u_int16_t tlv, cap, ena_cap;
907 u_int oui, tlen, hexdump, tlv_type, tlv_len;
908 const u_char *tptr;
1166 if (oid_len) {
1167 printf("\n\t OID length %u", oid_len);
1168 safeputs((const char *)tptr+1, oid_len);
1169 }
1170 }
1171
1172 return 1;
1173}
1174
1175void
1176lldp_print(register const u_char *pptr, register u_int len) {
1177
1178 u_int8_t subtype;
1179 u_int16_t tlv, cap, ena_cap;
1180 u_int oui, tlen, hexdump, tlv_type, tlv_len;
1181 const u_char *tptr;
1182 char *network_addr;
909
910 tptr = pptr;
911 tlen = len;
912
913 if (vflag) {
914 printf("LLDP, length %u", len);
915 }
916

--- 17 unchanged lines hidden (view full) ---

934 }
935
936 /* infinite loop check */
937 if (!tlv_type || !tlv_len) {
938 break;
939 }
940
941 TCHECK2(*tptr, tlv_len);
1183
1184 tptr = pptr;
1185 tlen = len;
1186
1187 if (vflag) {
1188 printf("LLDP, length %u", len);
1189 }
1190

--- 17 unchanged lines hidden (view full) ---

1208 }
1209
1210 /* infinite loop check */
1211 if (!tlv_type || !tlv_len) {
1212 break;
1213 }
1214
1215 TCHECK2(*tptr, tlv_len);
1216 if (tlen < tlv_len) {
1217 goto trunc;
1218 }
942
943 switch (tlv_type) {
1219
1220 switch (tlv_type) {
944 case LLDP_TTL_TLV:
945 if (vflag) {
946 printf(": TTL %us", EXTRACT_16BITS(tptr));
947 }
948 break;
949
1221
950 case LLDP_SYSTEM_NAME_TLV:
951
952 /*
953 * The system name is also print in non-verbose mode
954 * similar to the CDP printer.
955 */
956 if (vflag) {
957 printf(": ");
958 safeputs((const char *)tptr, tlv_len);
959 } else {
960 printf("LLDP, name ");
961 safeputs((const char *)tptr, tlv_len);
962 printf(", length %u", len);
963 }
964 break;
965
966 case LLDP_PORT_DESCR_TLV:
967 if (vflag) {
968 printf(": ");
969 safeputs((const char *)tptr, tlv_len);
970 }
971 break;
972
973 case LLDP_SYSTEM_DESCR_TLV:
974 if (vflag) {
975 printf("\n\t ");
976 safeputs((const char *)tptr, tlv_len);
977 }
978 break;
979
980
981 case LLDP_CHASSIS_ID_TLV:
982 if (vflag) {
1222 case LLDP_CHASSIS_ID_TLV:
1223 if (vflag) {
1224 if (tlv_len < 2) {
1225 goto trunc;
1226 }
983 subtype = *tptr;
984 printf("\n\t Subtype %s (%u): ",
985 tok2str(lldp_chassis_subtype_values, "Unknown", subtype),
986 subtype);
987
988 switch (subtype) {
989 case LLDP_CHASSIS_MAC_ADDR_SUBTYPE:
1227 subtype = *tptr;
1228 printf("\n\t Subtype %s (%u): ",
1229 tok2str(lldp_chassis_subtype_values, "Unknown", subtype),
1230 subtype);
1231
1232 switch (subtype) {
1233 case LLDP_CHASSIS_MAC_ADDR_SUBTYPE:
1234 if (tlv_len < 1+6) {
1235 goto trunc;
1236 }
990 printf("%s", etheraddr_string(tptr+1));
991 break;
992
993 case LLDP_CHASSIS_INTF_NAME_SUBTYPE: /* fall through */
994 case LLDP_CHASSIS_LOCAL_SUBTYPE:
995 case LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE:
996 case LLDP_CHASSIS_INTF_ALIAS_SUBTYPE:
997 case LLDP_CHASSIS_PORT_COMP_SUBTYPE:
998 safeputs((const char *)tptr+1, tlv_len-1);
999 break;
1000
1001 case LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE:
1237 printf("%s", etheraddr_string(tptr+1));
1238 break;
1239
1240 case LLDP_CHASSIS_INTF_NAME_SUBTYPE: /* fall through */
1241 case LLDP_CHASSIS_LOCAL_SUBTYPE:
1242 case LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE:
1243 case LLDP_CHASSIS_INTF_ALIAS_SUBTYPE:
1244 case LLDP_CHASSIS_PORT_COMP_SUBTYPE:
1245 safeputs((const char *)tptr+1, tlv_len-1);
1246 break;
1247
1248 case LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE:
1002 printf("%s", lldp_network_addr_print(tptr+1));
1249 network_addr = lldp_network_addr_print(tptr+1, tlv_len-1);
1250 if (network_addr == NULL) {
1251 goto trunc;
1252 }
1253 printf("%s", network_addr);
1003 break;
1004
1005 default:
1006 hexdump = TRUE;
1007 break;
1008 }
1009 }
1010 break;
1011
1012 case LLDP_PORT_ID_TLV:
1013 if (vflag) {
1254 break;
1255
1256 default:
1257 hexdump = TRUE;
1258 break;
1259 }
1260 }
1261 break;
1262
1263 case LLDP_PORT_ID_TLV:
1264 if (vflag) {
1265 if (tlv_len < 2) {
1266 goto trunc;
1267 }
1014 subtype = *tptr;
1015 printf("\n\t Subtype %s (%u): ",
1016 tok2str(lldp_port_subtype_values, "Unknown", subtype),
1017 subtype);
1018
1019 switch (subtype) {
1020 case LLDP_PORT_MAC_ADDR_SUBTYPE:
1268 subtype = *tptr;
1269 printf("\n\t Subtype %s (%u): ",
1270 tok2str(lldp_port_subtype_values, "Unknown", subtype),
1271 subtype);
1272
1273 switch (subtype) {
1274 case LLDP_PORT_MAC_ADDR_SUBTYPE:
1275 if (tlv_len < 1+6) {
1276 goto trunc;
1277 }
1021 printf("%s", etheraddr_string(tptr+1));
1022 break;
1023
1024 case LLDP_PORT_INTF_NAME_SUBTYPE: /* fall through */
1025 case LLDP_PORT_LOCAL_SUBTYPE:
1026 case LLDP_PORT_AGENT_CIRC_ID_SUBTYPE:
1027 case LLDP_PORT_INTF_ALIAS_SUBTYPE:
1028 case LLDP_PORT_PORT_COMP_SUBTYPE:
1029 safeputs((const char *)tptr+1, tlv_len-1);
1030 break;
1031
1032 case LLDP_PORT_NETWORK_ADDR_SUBTYPE:
1278 printf("%s", etheraddr_string(tptr+1));
1279 break;
1280
1281 case LLDP_PORT_INTF_NAME_SUBTYPE: /* fall through */
1282 case LLDP_PORT_LOCAL_SUBTYPE:
1283 case LLDP_PORT_AGENT_CIRC_ID_SUBTYPE:
1284 case LLDP_PORT_INTF_ALIAS_SUBTYPE:
1285 case LLDP_PORT_PORT_COMP_SUBTYPE:
1286 safeputs((const char *)tptr+1, tlv_len-1);
1287 break;
1288
1289 case LLDP_PORT_NETWORK_ADDR_SUBTYPE:
1033 printf("%s", lldp_network_addr_print(tptr+1));
1290 network_addr = lldp_network_addr_print(tptr+1, tlv_len-1);
1291 if (network_addr == NULL) {
1292 goto trunc;
1293 }
1294 printf("%s", network_addr);
1034 break;
1035
1036 default:
1037 hexdump = TRUE;
1038 break;
1039 }
1040 }
1041 break;
1042
1295 break;
1296
1297 default:
1298 hexdump = TRUE;
1299 break;
1300 }
1301 }
1302 break;
1303
1043 case LLDP_PRIVATE_TLV:
1304 case LLDP_TTL_TLV:
1044 if (vflag) {
1305 if (vflag) {
1045 oui = EXTRACT_24BITS(tptr);
1046 printf(": OUI %s (0x%06x)", tok2str(oui_values, "Unknown", oui), oui);
1047
1048 switch (oui) {
1049 case OUI_IEEE_8021_PRIVATE:
1050 hexdump = lldp_private_8021_print(tptr);
1051 break;
1052 case OUI_IEEE_8023_PRIVATE:
1053 hexdump = lldp_private_8023_print(tptr);
1054 break;
1055 case OUI_TIA:
1056 hexdump = lldp_private_tia_print(tptr, tlv_len);
1057 break;
1058 default:
1059 hexdump = TRUE;
1060 break;
1306 if (tlv_len < 2) {
1307 goto trunc;
1061 }
1308 }
1309 printf(": TTL %us", EXTRACT_16BITS(tptr));
1062 }
1063 break;
1064
1310 }
1311 break;
1312
1313 case LLDP_PORT_DESCR_TLV:
1314 if (vflag) {
1315 printf(": ");
1316 safeputs((const char *)tptr, tlv_len);
1317 }
1318 break;
1319
1320 case LLDP_SYSTEM_NAME_TLV:
1321 /*
1322 * The system name is also print in non-verbose mode
1323 * similar to the CDP printer.
1324 */
1325 if (vflag) {
1326 printf(": ");
1327 safeputs((const char *)tptr, tlv_len);
1328 } else {
1329 printf("LLDP, name ");
1330 safeputs((const char *)tptr, tlv_len);
1331 printf(", length %u", len);
1332 }
1333 break;
1334
1335 case LLDP_SYSTEM_DESCR_TLV:
1336 if (vflag) {
1337 printf("\n\t ");
1338 safeputs((const char *)tptr, tlv_len);
1339 }
1340 break;
1341
1065 case LLDP_SYSTEM_CAP_TLV:
1066 if (vflag) {
1342 case LLDP_SYSTEM_CAP_TLV:
1343 if (vflag) {
1344 /*
1345 * XXX - IEEE Std 802.1AB-2009 says the first octet
1346 * if a chassis ID subtype, with the system
1347 * capabilities and enabled capabilities following
1348 * it.
1349 */
1350 if (tlv_len < 4) {
1351 goto trunc;
1352 }
1067 cap = EXTRACT_16BITS(tptr);
1068 ena_cap = EXTRACT_16BITS(tptr+2);
1069 printf("\n\t System Capabilities [%s] (0x%04x)",
1070 bittok2str(lldp_cap_values, "none", cap), cap);
1071 printf("\n\t Enabled Capabilities [%s] (0x%04x)",
1072 bittok2str(lldp_cap_values, "none", ena_cap), ena_cap);
1073 }
1074 break;
1075
1076 case LLDP_MGMT_ADDR_TLV:
1077 if (vflag) {
1353 cap = EXTRACT_16BITS(tptr);
1354 ena_cap = EXTRACT_16BITS(tptr+2);
1355 printf("\n\t System Capabilities [%s] (0x%04x)",
1356 bittok2str(lldp_cap_values, "none", cap), cap);
1357 printf("\n\t Enabled Capabilities [%s] (0x%04x)",
1358 bittok2str(lldp_cap_values, "none", ena_cap), ena_cap);
1359 }
1360 break;
1361
1362 case LLDP_MGMT_ADDR_TLV:
1363 if (vflag) {
1078 if (!lldp_mgmt_addr_tlv_print(tptr, tlen)) {
1364 if (!lldp_mgmt_addr_tlv_print(tptr, tlv_len)) {
1079 goto trunc;
1080 }
1081 }
1082 break;
1083
1365 goto trunc;
1366 }
1367 }
1368 break;
1369
1370 case LLDP_PRIVATE_TLV:
1371 if (vflag) {
1372 if (tlv_len < 3) {
1373 goto trunc;
1374 }
1375 oui = EXTRACT_24BITS(tptr);
1376 printf(": OUI %s (0x%06x)", tok2str(oui_values, "Unknown", oui), oui);
1377
1378 switch (oui) {
1379 case OUI_IEEE_8021_PRIVATE:
1380 hexdump = lldp_private_8021_print(tptr, tlv_len);
1381 break;
1382 case OUI_IEEE_8023_PRIVATE:
1383 hexdump = lldp_private_8023_print(tptr, tlv_len);
1384 break;
1385 case OUI_TIA:
1386 hexdump = lldp_private_tia_print(tptr, tlv_len);
1387 break;
1388 case OUI_DCBX:
1389 hexdump = lldp_private_dcbx_print(tptr, tlv_len);
1390 break;
1391 default:
1392 hexdump = TRUE;
1393 break;
1394 }
1395 }
1396 break;
1397
1084 default:
1085 hexdump = TRUE;
1086 break;
1087 }
1088
1089 /* do we also want to see a hex dump ? */
1090 if (vflag > 1 || (vflag && hexdump)) {
1091 print_unknown_data(tptr,"\n\t ", tlv_len);

--- 16 unchanged lines hidden ---
1398 default:
1399 hexdump = TRUE;
1400 break;
1401 }
1402
1403 /* do we also want to see a hex dump ? */
1404 if (vflag > 1 || (vflag && hexdump)) {
1405 print_unknown_data(tptr,"\n\t ", tlv_len);

--- 16 unchanged lines hidden ---