[Xorp-hackers] error in buflen_error & rcvlen_error lables !!

Ashish Karpe ashishkarpe at gmail.com
Wed Mar 21 13:24:17 PDT 2007


hi all ,

We are not able to figure out what the error is coz haven't  use
those(buflen_error & rcvlen_error) lables  !!

*****************************************************************************************************

In pim_bidir_df.cc

int
PimVif::pim_bidir_df_send(const IPvX& src, const IPvX& dst,
         uint8_t message_type,uint8_t message_subtype , buffer_t *buffer,
         string& error_msg)
{
    uint8_t pim_vt;
    uint16_t cksum;
    uint16_t cksum2 = 0;
    int ip_tos = -1;
    int ret_value;
    size_t datalen;
    int ttl = MINTTL;
    bool is_router_alert = true;

    //
    // Prepare the PIM-BIDIR messages are Multicast with TTL 1 to the
"ALL-PIm-ROUTERS" header
    //All DF election BIDIR-PIM control message share the common header.

    datalen = BUFFER_DATA_SIZE(buffer);
    BUFFER_RESET_TAIL(buffer);
    //
    pim_vt = PIM_MAKE_VT(proto_version(), message_type);
    BUFFER_PUT_OCTET(pim_vt, buffer);        // PIM version and message type

    switch(message_subtype){
    case DF_OFFER :
        XLOG_INFO("ash : DF_OFFER");
            BUFFER_PUT_OCTET(DF_OFFER, buffer);    // Offer + Reserved
        //BUFFER_PUT_HOST_16(DF_OFFER, buffer);
        break;
    case DF_WINNER :
        XLOG_INFO("ash : DF_WINNER");
            BUFFER_PUT_OCTET(DF_WINNER, buffer);    // Winner + Reserved
//        BUFFER_PUT_HOST_16(DF_WINNER, buffer);
        break;
    case DF_BACKOFF :
        XLOG_INFO("ash : DF_BACKOFF");
            BUFFER_PUT_OCTET(DF_BACKOFF, buffer);    // Backoff + Reserved
        break;
    case DF_PASS    :
        XLOG_INFO("ash : DF_PASS");
            BUFFER_PUT_OCTET(DF_PASS, buffer);    // Pass + Reserved
        break;

    default :
        XLOG_INFO("ash : Default");
        BUFFER_PUT_OCTET(0xb, buffer);
        break;

}

    BUFFER_PUT_HOST_16(0, buffer);        // Zero the checksum field


 // Restore the buffer to include the data
    BUFFER_RESET_TAIL(buffer);
    BUFFER_PUT_SKIP(datalen, buffer);

    //
    // Compute the checksum
    //
    if (is_ipv6()) {
    //
    // XXX: The checksum for IPv6 includes the IPv6 "pseudo-header"
    // as described in RFC 2460.
    //
    size_t ph_len;
    if (message_type == PIM_REGISTER)
        ph_len = PIM_REGISTER_HEADER_LENGTH;
    else
        ph_len = BUFFER_DATA_SIZE(buffer);
    cksum2 = calculate_ipv6_pseudo_header_checksum(src, dst, ph_len,
                               IPPROTO_PIM);
    }

    // XXX: The checksum for PIM_REGISTER excludes the encapsulated data
packet
    switch (message_type) {
    case PIM_REGISTER:
    cksum = INET_CKSUM(BUFFER_DATA_HEAD(buffer),
               PIM_REGISTER_HEADER_LENGTH);
    break;
    default:
    cksum = INET_CKSUM(BUFFER_DATA_HEAD(buffer), BUFFER_DATA_SIZE(buffer));
    break;
    }

    cksum = INET_CKSUM_ADD(cksum, cksum2);
    BUFFER_COPYPUT_INET_CKSUM(cksum, buffer, 2);    // XXX: the ckecksum

    //
    // Send the message
    //
    ret_value = pim_node().pim_send(vif_index(), src, dst, ttl, ip_tos,
                    is_router_alert, buffer, error_msg);

    return (ret_value);


}


/**
 * PimVif::pim__bidir_df_recv:
 * @pim_nbr: The PIM neighbor message originator (or NULL if not a
neighbor).
 * @src: The message source address.
 * @dst: The message destination address.
 * @buffer: The buffer with the message.
 *
 * Receive PIM_ASSERT message.
 *
 * Return value: %XORP_OK on success, otherwise %XORP_ERROR.
 **/
int
PimVif::pim_bidir_df_recv(const IPvX& src,const IPvX& dst,int ip_ttl,
         int ip_tos,buffer_t *buffer)
{

    uint8_t pim_vt;
    uint8_t message_type, proto_version,message_subtype;

    // Ignore my own PIM messages
//    if (pim_node().is_my_addr(src))
//            return (XORP_ERROR);

    //
    // Message length check.
    //

    if (BUFFER_DATA_SIZE(buffer) < PIM_MINLEN) {
    XLOG_WARNING("RX packet from %s to %s on vif %s: "
             "too short data field (%u bytes)",
             cstring(src), cstring(dst),
             name().c_str(),
             XORP_UINT_CAST(BUFFER_DATA_SIZE(buffer)));
    ++_pimstat_bad_length_messages;
    return (XORP_ERROR);
    }

    //
    // Parse the message
    //


    //
    // Get the message type and PIM protocol version.
    // XXX: First we need the message type to verify correctly the checksum.
    //

    BUFFER_GET_OCTET(pim_vt, buffer);
    BUFFER_GET_SKIP_REVERSE(1, buffer);        // Rewind back


proto_version = PIM_VT_V(pim_vt);


//    BUFFER_GET_OCTET(pim_vt, buffer);


    while (BUFFER_DATA_SIZE(buffer) > 0) {
    BUFFER_GET_OCTET(pim_vt, buffer);
    message_type = PIM_VT_T(pim_vt);
    switch(message_type)
    {
        case PIM_ALL_DF_ELECTION :
                    XLOG_INFO("ash :  PIM_ALL_DF_ELECTION recvd");
                    break;

        default :
                XLOG_INFO("ash : Wrong PIM_ALL_DF_ELECTION Election Recvd");
                    break;

    }


    BUFFER_GET_OCTET(message_subtype, buffer);
        switch(message_subtype)
        {
                case DF_OFFER :
                    XLOG_INFO("ash : DF_OFFER recvd");
                    break;

                case DF_WINNER :
                    XLOG_INFO("ash : DF_WINNER recvd");
                    break;

                case DF_BACKOFF :
                    XLOG_INFO("ash : DF_BACKOFF recvd");
                    break;

                case DF_PASS :
                    XLOG_INFO("ash : DF_PASS recvd");
                    break;

                default :
                    XLOG_INFO("ash : Wrong DF offers Election Recvd");
                    break;

        }
    }
        //
        // TODO: check the TTL and TOS if we are running in secure mode
        //
        UNUSED(ip_ttl);
        UNUSED(ip_tos);
#if 0
        if (ip_ttl != MINTTL) {
        XLOG_WARNING("RX %s from %s to %s on vif %s: "
                 "ip_ttl = %d instead of %d",
                 PIMTYPE2ASCII(message_type),
                 cstring(src), cstring(dst),
                 name().c_str(),
                 ip_ttl, MINTTL);
        ret_value = XORP_ERROR;
        goto ret_label;
        }
#endif // 0

    return (XORP_OK);




}

********************************************************************************************************
error :

pim_bidir_df.cc:110: error: label 'buflen_error' used but not defined
pim_bidir_df.cc: In member function 'int PimVif::pim_bidir_df_recv(const
IPvX&, const IPvX&, int, int, buffer_t*)':
pim_bidir_df.cc:286: error: label 'rcvlen_error' used but not defined
gmake[2]: *** [pim_bidir_df.lo] Error 1
gmake[2]: Leaving directory `/root/project/df/xorp-1.3/pim'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/project/df/xorp-1.3'
gmake: *** [all] Error 2


********************************************************************************************************
Error shown @ following lines :

Line No. 110 : BUFFER_PUT_OCTET(pim_vt, buffer);        // PIM version and
message type

Line No. 286 : BUFFER_GET_OCTET(pim_vt, buffer);

************************************************************************

Thank you,
ashish
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ICSI.Berkeley.EDU/pipermail/xorp-hackers/attachments/20070322/e3214a2e/attachment.html 


More information about the Xorp-hackers mailing list