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

📄 print-rsvp.c

📁 TCPDUMP的C语言源代码,是在数据链路层的应用
💻 C
📖 第 1 页 / 共 5 页
字号:
        case RSVP_OBJ_FASTREROUTE:            /* the differences between c-type 1 and 7 are minor */            obj_ptr.rsvp_obj_frr = (const struct rsvp_obj_frr_t *)obj_tptr;            bw.i = EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->bandwidth);            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1: /* new style */                if (obj_tlen < sizeof(struct rsvp_obj_frr_t))                    return-1;                printf("%s  Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",                       ident,                       (int)obj_ptr.rsvp_obj_frr->setup_prio,                       (int)obj_ptr.rsvp_obj_frr->hold_prio,                       (int)obj_ptr.rsvp_obj_frr->hop_limit,                        bw.f*8/1000000);                              printf("%s  Include-any: 0x%08x, Exclude-any: 0x%08x, Include-all: 0x%08x",                       ident,                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->include_any),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->exclude_any),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->include_all));                obj_tlen-=sizeof(struct rsvp_obj_frr_t);                obj_tptr+=sizeof(struct rsvp_obj_frr_t);                break;            case RSVP_CTYPE_TUNNEL_IPV4: /* old style */                if (obj_tlen < 16)                    return-1;                printf("%s  Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",                       ident,                       (int)obj_ptr.rsvp_obj_frr->setup_prio,                       (int)obj_ptr.rsvp_obj_frr->hold_prio,                       (int)obj_ptr.rsvp_obj_frr->hop_limit,                        bw.f*8/1000000);                              printf("%s  Include Colors: 0x%08x, Exclude Colors: 0x%08x",                       ident,                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->include_any),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->exclude_any));                obj_tlen-=16;                obj_tptr+=16;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_DETOUR:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_TUNNEL_IPV4:                while(obj_tlen >= 8) {                    printf("%s  PLR-ID: %s, Avoid-Node-ID: %s",                           ident,                           ipaddr_string(obj_tptr),                           ipaddr_string(obj_tptr+4));                                  obj_tlen-=8;                    obj_tptr+=8;                }                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_CLASSTYPE:        case RSVP_OBJ_CLASSTYPE_OLD: /* fall through */            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                printf("%s  CT: %u",                       ident,                       EXTRACT_32BITS(obj_tptr)&0x7);                              obj_tlen-=4;                obj_tptr+=4;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_ERROR_SPEC:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */            case RSVP_CTYPE_IPV4:                if (obj_tlen < 8)                    return-1;                error_code=*(obj_tptr+5);                error_value=EXTRACT_16BITS(obj_tptr+6);                printf("%s  Error Node Address: %s, Flags: [0x%02x]%s  Error Code: %s (%u)",                       ident,                       ipaddr_string(obj_tptr),                       *(obj_tptr+4),                       ident,                       tok2str(rsvp_obj_error_code_values,"unknown",error_code),                       error_code);                switch (error_code) {                case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING:                    printf(", Error Value: %s (%u)",                           tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value),                           error_value);                    break;                case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE: /* fall through */                case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE_OLD:                    printf(", Error Value: %s (%u)",                           tok2str(rsvp_obj_error_code_diffserv_te_values,"unknown",error_value),                           error_value);                    break;                default:                    printf(", Unknown Error Value (%u)", error_value);                    break;                }                obj_tlen-=8;                obj_tptr+=8;                break;#ifdef INET6            case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */            case RSVP_CTYPE_IPV6:                if (obj_tlen < 20)                    return-1;                error_code=*(obj_tptr+17);                error_value=EXTRACT_16BITS(obj_tptr+18);                printf("%s  Error Node Address: %s, Flags: [0x%02x]%s  Error Code: %s (%u)",                       ident,                       ip6addr_string(obj_tptr),                       *(obj_tptr+16),                       ident,                       tok2str(rsvp_obj_error_code_values,"unknown",error_code),                       error_code);                switch (error_code) {                case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING:                    printf(", Error Value: %s (%u)",                           tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value),			   error_value);                    break;                default:                    break;                }                obj_tlen-=20;                obj_tptr+=20;                break;#endif            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_PROPERTIES:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                if (obj_tlen < 4)                    return-1;                padbytes = EXTRACT_16BITS(obj_tptr+2);                printf("%s  TLV count: %u, padding bytes: %u",                       ident,                       EXTRACT_16BITS(obj_tptr),                       padbytes);                obj_tlen-=4;                obj_tptr+=4;                /* loop through as long there is anything longer than the TLV header (2) */                while(obj_tlen >= 2 + padbytes) {                    printf("%s    %s TLV (0x%02x), length: %u", /* length includes header */                           ident,                           tok2str(rsvp_obj_prop_tlv_values,"unknown",*obj_tptr),                           *obj_tptr,                           *(obj_tptr+1));                    if (obj_tlen < *(obj_tptr+1))                        return-1;                    if (*(obj_tptr+1) < 2)                        return -1;                    print_unknown_data(obj_tptr+2,"\n\t\t",*(obj_tptr+1)-2);                    obj_tlen-=*(obj_tptr+1);                    obj_tptr+=*(obj_tptr+1);                }                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_MESSAGE_ID:     /* fall through */        case RSVP_OBJ_MESSAGE_ID_ACK: /* fall through */        case RSVP_OBJ_MESSAGE_ID_LIST:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:            case RSVP_CTYPE_2:                if (obj_tlen < 8)                    return-1;                printf("%s  Flags [0x%02x], epoch: %u",                       ident,                       *obj_tptr,                       EXTRACT_24BITS(obj_tptr+1));                obj_tlen-=4;                obj_tptr+=4;                /* loop through as long there are no messages left */                while(obj_tlen >= 4) {                    printf("%s    Message-ID 0x%08x (%u)",                           ident,                           EXTRACT_32BITS(obj_tptr),                           EXTRACT_32BITS(obj_tptr));                    obj_tlen-=4;                    obj_tptr+=4;                }                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_INTEGRITY:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                if (obj_tlen < sizeof(struct rsvp_obj_integrity_t))                    return-1;                obj_ptr.rsvp_obj_integrity = (const struct rsvp_obj_integrity_t *)obj_tptr;                printf("%s  Key-ID 0x%04x%08x, Sequence 0x%08x%08x, Flags [%s]",                       ident,                       EXTRACT_16BITS(obj_ptr.rsvp_obj_integrity->key_id),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->key_id+2),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->sequence),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->sequence+4),                       bittok2str(rsvp_obj_integrity_flag_values,                                  "none",                                  obj_ptr.rsvp_obj_integrity->flags));                printf("%s  MD5-sum 0x%08x%08x%08x%08x (unverified)",                       ident,                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest+4),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest+8),                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest+12));                obj_tlen+=sizeof(struct rsvp_obj_integrity_t);                obj_tptr+=sizeof(struct rsvp_obj_integrity_t);                break;            default:                hexdump=TRUE;            }            break;                   case RSVP_OBJ_ADMIN_STATUS:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                 if (obj_tlen < 4)                    return-1;                printf("%s  Flags [%s]", ident,                       bittok2str(rsvp_obj_admin_status_flag_values, "none",                                  EXTRACT_32BITS(obj_tptr)));                obj_tlen-=4;                obj_tptr+=4;                break;            default:                hexdump=TRUE;            }            break;        case RSVP_OBJ_LABEL_SET:            switch(rsvp_obj_ctype) {            case RSVP_CTYPE_1:                 if (obj_tlen < 4)                    return-1;                action = (EXTRACT_16BITS(obj_tptr)>>8);                printf("%s  Action: %s (%u), Label type: %u", ident,                       tok2str(rsvp_obj_label_set_action_values, "Unknown", action),                       action, ((EXTRACT_32BITS(obj_tptr) & 0x7F)));                switch (action) {                case LABEL_SET_INCLUSIVE_RANGE:                case LABEL_SET_EXCLUSIVE_RANGE: /* fall through */		    /* only a couple of subchannels are expected */		    if (obj_tlen < 12)			return -1;		    printf("%s  Start range: %u, End range: %u", ident,                           EXTRACT_32BITS(obj_tptr+4),                           EXTRACT_32BITS(obj_tptr+8));		    obj_tlen-=12;		    obj_tptr+=12;                    break;                default:                    obj_tlen-=4;                    obj_tptr+=4;                    subchannel = 1;                    while(obj_tlen >= 4 ) {                        printf("%s  Subchannel #%u: %u", ident, subchannel,                               EXTRACT_32BITS(obj_tptr));                        obj_tptr+=4;                        obj_tlen-=4;                        subchannel++;                    }                    break;                }                break;            default:                hexdump=TRUE;            }        /*         *  FIXME those are the defined objects that lack a decoder         *  you are welcome to contribute code ;-)         */        case RSVP_OBJ_SCOPE:        case RSVP_OBJ_POLICY_DATA:        case RSVP_OBJ_ACCEPT_LABEL_SET:        case RSVP_OBJ_PROTECTION:        default:            if (vflag <= 1)                print_unknown_data(obj_tptr,"\n\t    ",obj_tlen); /* FIXME indentation */            break;        }        /* do we also want to see a hex dump ? */        if (vflag > 1 || hexdump==TRUE)            print_unknown_data(tptr+sizeof(sizeof(struct rsvp_object_header)),"\n\t    ", /* FIXME indentation */                               rsvp_obj_len-sizeof(struct rsvp_object_header));        tptr+=rsvp_obj_len;        tlen-=rsvp_obj_len;    }    return 0;trunc:    printf("\n\t\t packet exceeded snapshot");    return -1;}voidrsvp_prin

⌨️ 快捷键说明

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