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

📄 print-rsvp.c

📁 TCPDUMP的C语言源代码,是在数据链路层的应用
💻 C
📖 第 1 页 / 共 5 页
字号:
                    case RSVP_OBJ_XRO_IPV4:                        printf(", %s, %s/%u, Flags: [%s]",                               RSVP_OBJ_XRO_MASK_LOOSE(*obj_tptr) ? "Loose" : "Strict",                               ipaddr_string(obj_tptr+2),                               *(obj_tptr+6),                               bittok2str(rsvp_obj_rro_flag_values,                                   "none",                                   *(obj_tptr+7))); /* rfc3209 says that this field is rsvd. */                    }                    obj_tlen-=*(obj_tptr+1);                    obj_tptr+=*(obj_tptr+1);                }                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_HELLO:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:            case RSVP_CTYPE_2:                if (obj_tlen < 8)                    return-1;                printf("%s  Source Instance: 0x%08x, Destination Instance: 0x%08x",                       ident,                       EXTRACT_32BITS(obj_tptr),                       EXTRACT_32BITS(obj_tptr+4));                obj_tlen-=8;                obj_tptr+=8;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_RESTART_CAPABILITY:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                if (obj_tlen < 8)                    return-1;                printf("%s  Restart  Time: %ums, Recovery Time: %ums",                       ident,                       EXTRACT_32BITS(obj_tptr),                       EXTRACT_32BITS(obj_tptr+4));                obj_tlen-=8;                obj_tptr+=8;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_SESSION_ATTRIBUTE:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_TUNNEL_IPV4:                if (obj_tlen < 4)                    return-1;                namelen = *(obj_tptr+3);                if (obj_tlen < 4+namelen)                    return-1;                printf("%s  Session Name: ", ident);                for (i = 0; i < namelen; i++)                    safeputchar(*(obj_tptr+4+i));                printf("%s  Setup Priority: %u, Holding Priority: %u, Flags: [%s]",                       ident,                       (int)*obj_tptr,                       (int)*(obj_tptr+1),                       tok2str(rsvp_session_attribute_flag_values,                                  "none",                                  *(obj_tptr+2)));                obj_tlen-=4+*(obj_tptr+3);                obj_tptr+=4+*(obj_tptr+3);                break;            default:                hexdump=TRUE;            }            break;	case RSVP_OBJ_GENERALIZED_UNI:            switch(rsvp_obj_ctype) {		int subobj_type,af,subobj_len,total_subobj_len;            case RSVP_CTYPE_1:                 if (obj_tlen < 4)                    return-1;		/* read variable length subobjects */		total_subobj_len = obj_tlen;                while(total_subobj_len > 0) {                    subobj_len  = EXTRACT_16BITS(obj_tptr);                    subobj_type = (EXTRACT_16BITS(obj_tptr+2))>>8;                    af = (EXTRACT_16BITS(obj_tptr+2))&0x00FF;                    printf("%s  Subobject Type: %s (%u), AF: %s (%u), length: %u",                           ident,                           tok2str(rsvp_obj_generalized_uni_values, "Unknown", subobj_type),                           subobj_type,                           tok2str(af_values, "Unknown", af), af,                           subobj_len);                    switch(subobj_type) {                    case RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS:                    case RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS:                        switch(af) {                        case AFNUM_INET:                            if (subobj_len < 8)                                return -1;                            printf("%s    UNI IPv4 TNA address: %s",                                   ident, ipaddr_string(obj_tptr+4));                            break;#ifdef INET6                        case AFNUM_INET6:                            if (subobj_len < 20)                                return -1;                            printf("%s    UNI IPv6 TNA address: %s",                                   ident, ip6addr_string(obj_tptr+4));                            break;#endif                        case AFNUM_NSAP:                            if (subobj_len) {                                /* unless we have a TLV parser lets just hexdump */                                hexdump=TRUE;                            }                            break;                        }                        break;                    case RSVP_GEN_UNI_SUBOBJ_DIVERSITY:                        if (subobj_len) {                            /* unless we have a TLV parser lets just hexdump */                            hexdump=TRUE;                        }                        break;                    case RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL:                        if (subobj_len < 16) {                            return -1;                        }                        printf("%s    U-bit: %x, Label type: %u, Logical port id: %u, Label: %u",                               ident,                               ((EXTRACT_32BITS(obj_tptr+4))>>31),                               ((EXTRACT_32BITS(obj_tptr+4))&0xFF),                               EXTRACT_32BITS(obj_tptr+8),                               EXTRACT_32BITS(obj_tptr+12));                        break;                    case RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL:                        if (subobj_len < 8) {                            return -1;                        }                        printf("%s    Service level: %u",                               ident, (EXTRACT_32BITS(obj_tptr+4))>>24);                        break;                    default:                        hexdump=TRUE;                        break;                    }                    total_subobj_len-=subobj_len;                    obj_tptr+=subobj_len;                    obj_tlen+=subobj_len;		}                if (total_subobj_len) {                    /* unless we have a TLV parser lets just hexdump */                    hexdump=TRUE;                }                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_RSVP_HOP:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */            case RSVP_CTYPE_IPV4:                if (obj_tlen < 8)                    return-1;                printf("%s  Previous/Next Interface: %s, Logical Interface Handle: 0x%08x",                       ident,                       ipaddr_string(obj_tptr),                       EXTRACT_32BITS(obj_tptr+4));                obj_tlen-=8;                obj_tptr+=8;                if (obj_tlen)                    hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */                break;#ifdef INET6            case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */            case RSVP_CTYPE_IPV6:                if (obj_tlen < 20)                    return-1;                printf("%s  Previous/Next Interface: %s, Logical Interface Handle: 0x%08x",                       ident,                       ip6addr_string(obj_tptr),                       EXTRACT_32BITS(obj_tptr+16));                obj_tlen-=20;                obj_tptr+=20;                hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */                break;#endif            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_TIME_VALUES:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                if (obj_tlen < 4)                    return-1;                printf("%s  Refresh Period: %ums",                       ident,                       EXTRACT_32BITS(obj_tptr));                obj_tlen-=4;                obj_tptr+=4;                break;            default:                hexdump=TRUE;            }            break;        /* those three objects do share the same semantics */        case RSVP_OBJ_SENDER_TSPEC:        case RSVP_OBJ_ADSPEC:        case RSVP_OBJ_FLOWSPEC:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_2:                if (obj_tlen < 4)                    return-1;                printf("%s  Msg-Version: %u, length: %u",                       ident,                       (*obj_tptr & 0xf0) >> 4,                       EXTRACT_16BITS(obj_tptr+2)<<2);                obj_tptr+=4; /* get to the start of the service header */                obj_tlen-=4;                while (obj_tlen >= 4) {                    intserv_serv_tlen=EXTRACT_16BITS(obj_tptr+2)<<2;                    printf("%s  Service Type: %s (%u), break bit %s set, Service length: %u",                           ident,                           tok2str(rsvp_intserv_service_type_values,"unknown",*(obj_tptr)),                           *(obj_tptr),                           (*(obj_tptr+1)&0x80) ? "" : "not",                           intserv_serv_tlen);                                        obj_tptr+=4; /* get to the start of the parameter list */                    obj_tlen-=4;                    while (intserv_serv_tlen>=4) {                        processed = rsvp_intserv_print(obj_tptr, obj_tlen);                        if (processed == 0)                            break;                        obj_tlen-=processed;                        intserv_serv_tlen-=processed;                        obj_tptr+=processed;                    }                }                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_FILTERSPEC:            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;            case RSVP_CTYPE_3:                if (obj_tlen < 20)                    return-1;                printf("%s  Source Address: %s, Flow Label: %u",                       ident,                       ip6addr_string(obj_tptr),                       EXTRACT_24BITS(obj_tptr+17));                obj_tlen-=20;                obj_tptr+=20;                break;            case RSVP_CTYPE_TUNNEL_IPV6:                if (obj_tlen < 20)                    return-1;                printf("%s  Source Address: %s, LSP-ID: 0x%04x",                       ident,                       ipaddr_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  Source 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;

⌨️ 快捷键说明

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