⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print-rsvp.c

📁 TCPDUMP的C语言源代码,是在数据链路层的应用
💻 C
📖 第 1 页 / 共 5 页
字号:
        if (rsvp_obj_header->class_num > 128)            printf(" %s",                   ((rsvp_obj_header->class_num)&0x40) ? "and forward" : "silently");        printf(" if unknown], Class-Type: %s (%u), length: %u",               tok2str(rsvp_ctype_values,                       "Unknown",                       ((rsvp_obj_header->class_num)<<8)+rsvp_obj_ctype),               rsvp_obj_ctype,               rsvp_obj_len);            if(tlen < rsvp_obj_len) {            printf("%sERROR: object goes past end of objects TLV", ident);            return -1;        }        obj_tptr=tptr+sizeof(struct rsvp_object_header);        obj_tlen=rsvp_obj_len-sizeof(struct rsvp_object_header);        /* did we capture enough for fully decoding the object ? */        if (!TTEST2(*tptr, rsvp_obj_len))            return -1;        hexdump=FALSE;        switch(rsvp_obj_header->class_num) {        case RSVP_OBJ_SESSION:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_IPV4:                if (obj_tlen < 8)                    return -1;                printf("%s  IPv4 DestAddress: %s, Protocol ID: 0x%02x",                       ident,                       ipaddr_string(obj_tptr),                       *(obj_tptr+sizeof(struct in_addr)));                printf("%s  Flags: [0x%02x], DestPort %u",                       ident,                       *(obj_tptr+5),                       EXTRACT_16BITS(obj_tptr+6));                obj_tlen-=8;                obj_tptr+=8;                                break;#ifdef INET6            case RSVP_CTYPE_IPV6:                if (obj_tlen < 20)                    return -1;                printf("%s  IPv6 DestAddress: %s, Protocol ID: 0x%02x",                       ident,                       ip6addr_string(obj_tptr),                       *(obj_tptr+sizeof(struct in6_addr)));                printf("%s  Flags: [0x%02x], DestPort %u",                       ident,                       *(obj_tptr+sizeof(struct in6_addr)+1),                       EXTRACT_16BITS(obj_tptr+sizeof(struct in6_addr)+2));                obj_tlen-=20;                obj_tptr+=20;                                break;            case RSVP_CTYPE_TUNNEL_IPV6:                if (obj_tlen < 36)                    return -1;                printf("%s  IPv6 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",                       ident,                       ip6addr_string(obj_tptr),                       EXTRACT_16BITS(obj_tptr+18),                       ip6addr_string(obj_tptr+20));                obj_tlen-=36;                obj_tptr+=36;                                break;#endif            case RSVP_CTYPE_TUNNEL_IPV4:            case RSVP_CTYPE_UNI_IPV4:                if (obj_tlen < 12)                    return -1;                printf("%s  IPv4 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",                       ident,                       ipaddr_string(obj_tptr),                       EXTRACT_16BITS(obj_tptr+6),                       ipaddr_string(obj_tptr+8));                obj_tlen-=12;                obj_tptr+=12;                                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_CONFIRM:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_IPV4:                if (obj_tlen < sizeof(struct in_addr))                    return -1;                printf("%s  IPv4 Receiver Address: %s",                       ident,                       ipaddr_string(obj_tptr));                obj_tlen-=sizeof(struct in_addr);                obj_tptr+=sizeof(struct in_addr);                                break;#ifdef INET6            case RSVP_CTYPE_IPV6:                if (obj_tlen < sizeof(struct in6_addr))                    return -1;                printf("%s  IPv6 Receiver Address: %s",                       ident,                       ip6addr_string(obj_tptr));                obj_tlen-=sizeof(struct in6_addr);                obj_tptr+=sizeof(struct in6_addr);                                break;#endif            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_NOTIFY_REQ:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_IPV4:                if (obj_tlen < sizeof(struct in_addr))                    return -1;                printf("%s  IPv4 Notify Node Address: %s",                       ident,                       ipaddr_string(obj_tptr));                obj_tlen-=sizeof(struct in_addr);                obj_tptr+=sizeof(struct in_addr);                                break;#ifdef INET6            case RSVP_CTYPE_IPV6:                if (obj_tlen < sizeof(struct in6_addr))                    return-1;                printf("%s  IPv6 Notify Node Address: %s",                       ident,                       ip6addr_string(obj_tptr));                obj_tlen-=sizeof(struct in6_addr);                obj_tptr+=sizeof(struct in6_addr);                                break;#endif            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_SUGGESTED_LABEL: /* fall through */        case RSVP_OBJ_UPSTREAM_LABEL:  /* fall through */        case RSVP_OBJ_RECOVERY_LABEL:  /* fall through */        case RSVP_OBJ_LABEL:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                while(obj_tlen >= 4 ) {                    printf("%s  Label: %u", ident, EXTRACT_32BITS(obj_tptr));                    obj_tlen-=4;                    obj_tptr+=4;                }                break;            case RSVP_CTYPE_2:                if (obj_tlen < 4)                    return-1;                printf("%s  Generalized Label: %u",                       ident,                       EXTRACT_32BITS(obj_tptr));                obj_tlen-=4;                obj_tptr+=4;                break;            case RSVP_CTYPE_3:                if (obj_tlen < 12)                    return-1;                printf("%s  Waveband ID: %u%s  Start Label: %u, Stop Label: %u",                       ident,                       EXTRACT_32BITS(obj_tptr),                       ident,                       EXTRACT_32BITS(obj_tptr+4),                       EXTRACT_32BITS(obj_tptr+8));                obj_tlen-=12;                obj_tptr+=12;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_STYLE:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                if (obj_tlen < 4)                    return-1;                printf("%s  Reservation Style: %s, Flags: [0x%02x]",                       ident,                       tok2str(rsvp_resstyle_values,                               "Unknown",                               EXTRACT_24BITS(obj_tptr+1)),                       *(obj_tptr));                obj_tlen-=4;                obj_tptr+=4;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_SENDER_TEMPLATE:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_IPV4:                if (obj_tlen < 8)                    return-1;                printf("%s  Source Address: %s, Source Port: %u",                       ident,                       ipaddr_string(obj_tptr),                       EXTRACT_16BITS(obj_tptr+6));                obj_tlen-=8;                obj_tptr+=8;                break;#ifdef INET6            case RSVP_CTYPE_IPV6:                if (obj_tlen < 20)                    return-1;                printf("%s  Source Address: %s, Source Port: %u",                       ident,                       ip6addr_string(obj_tptr),                       EXTRACT_16BITS(obj_tptr+18));                obj_tlen-=20;                obj_tptr+=20;                break;#endif            case RSVP_CTYPE_TUNNEL_IPV4:                if (obj_tlen < 8)                    return-1;                printf("%s  IPv4 Tunnel Sender Address: %s, LSP-ID: 0x%04x",                       ident,                       ipaddr_string(obj_tptr),                       EXTRACT_16BITS(obj_tptr+6));                obj_tlen-=8;                obj_tptr+=8;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_LABEL_REQ:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                while(obj_tlen >= 4 ) {                    printf("%s  L3 Protocol ID: %s",                           ident,                           tok2str(ethertype_values,                                   "Unknown Protocol (0x%04x)",                                   EXTRACT_16BITS(obj_tptr+2)));                    obj_tlen-=4;                    obj_tptr+=4;                }                break;            case RSVP_CTYPE_2:                if (obj_tlen < 12)                    return-1;                printf("%s  L3 Protocol ID: %s",                       ident,                       tok2str(ethertype_values,                               "Unknown Protocol (0x%04x)",                               EXTRACT_16BITS(obj_tptr+2)));                printf(",%s merge capability",((*(obj_tptr+4))&0x80) ? "no" : "" );                printf("%s  Minimum VPI/VCI: %u/%u",                       ident,                       (EXTRACT_16BITS(obj_tptr+4))&0xfff,                       (EXTRACT_16BITS(obj_tptr+6))&0xfff);                printf("%s  Maximum VPI/VCI: %u/%u",                       ident,                       (EXTRACT_16BITS(obj_tptr+8))&0xfff,                       (EXTRACT_16BITS(obj_tptr+10))&0xfff);                obj_tlen-=12;                obj_tptr+=12;                break;            case RSVP_CTYPE_3:                if (obj_tlen < 12)                    return-1;                printf("%s  L3 Protocol ID: %s",                       ident,                       tok2str(ethertype_values,                               "Unknown Protocol (0x%04x)",                               EXTRACT_16BITS(obj_tptr+2)));                printf("%s  Minimum/Maximum DLCI: %u/%u, %s%s bit DLCI",                       ident,                       (EXTRACT_32BITS(obj_tptr+4))&0x7fffff,                       (EXTRACT_32BITS(obj_tptr+8))&0x7fffff,                       (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 0 ) ? "10" : "",                       (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 2 ) ? "23" : "");                obj_tlen-=12;                obj_tptr+=12;                break;            case RSVP_CTYPE_4:                if (obj_tlen < 4)                    return-1;                printf("%s  LSP Encoding Type: %s (%u)",                       ident,                       tok2str(gmpls_encoding_values,                               "Unknown",                               *obj_tptr),		       *obj_tptr);                printf("%s  Switching Type: %s (%u), Payload ID: %s (0x%04x)",                       ident,                       tok2str(gmpls_switch_cap_values,                               "Unknown",                               *(obj_tptr+1)),		       *(obj_tptr+1),                       tok2str(gmpls_payload_values,                               "Unknown",                               EXTRACT_16BITS(obj_tptr+2)),		       EXTRACT_16BITS(obj_tptr+2));                obj_tlen-=4;                obj_tptr+=4;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_RRO:        case RSVP_OBJ_ERO:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_IPV4:                while(obj_tlen >= 4 ) {                    printf("%s  Subobject Type: %s, length %u",                           ident,                           tok2str(rsvp_obj_xro_values,                                   "Unknown %u",                                   RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)),                           *(obj_tptr+1));                                    if (*(obj_tptr+1) == 0) { /* prevent infinite loops */                        printf("%s  ERROR: zero length ERO subtype",ident);                        break;                    }                    switch(RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -