hi all ,<br><br>
We are not able to figure out what the error is coz haven't use those(buflen_error & rcvlen_error) lables !! <br><br>*****************************************************************************************************
<br>In pim_bidir_df.cc<br><br>int<br>PimVif::pim_bidir_df_send(const IPvX& src, const IPvX& dst,<br> uint8_t message_type,uint8_t message_subtype , buffer_t *buffer,<br> string& error_msg)<br>{
<br> uint8_t pim_vt;<br> uint16_t cksum;<br> uint16_t cksum2 = 0;<br> int ip_tos = -1;<br> int ret_value;<br> size_t datalen;<br> int ttl = MINTTL;<br> bool is_router_alert = true;<br><br> //<br>
// Prepare the PIM-BIDIR messages are Multicast with TTL 1 to the "ALL-PIm-ROUTERS" header<br> //All DF election BIDIR-PIM control message share the common header.<br><br> datalen = BUFFER_DATA_SIZE(buffer);
<br> BUFFER_RESET_TAIL(buffer);<br> //<br> pim_vt = PIM_MAKE_VT(proto_version(), message_type);<br> BUFFER_PUT_OCTET(pim_vt, buffer); // PIM version and message type<br> <br> switch(message_subtype){
<br> case DF_OFFER : <br> XLOG_INFO("ash : DF_OFFER");<br> BUFFER_PUT_OCTET(DF_OFFER, buffer); // Offer + Reserved <br> //BUFFER_PUT_HOST_16(DF_OFFER, buffer);<br> break;
<br> case DF_WINNER : <br> XLOG_INFO("ash : DF_WINNER");<br> BUFFER_PUT_OCTET(DF_WINNER, buffer); // Winner + Reserved <br>// BUFFER_PUT_HOST_16(DF_WINNER, buffer);<br> break;
<br> case DF_BACKOFF : <br> XLOG_INFO("ash : DF_BACKOFF");<br> BUFFER_PUT_OCTET(DF_BACKOFF, buffer); // Backoff + Reserved <br> break;<br> case DF_PASS : <br> XLOG_INFO("ash : DF_PASS");
<br> BUFFER_PUT_OCTET(DF_PASS, buffer); // Pass + Reserved <br> break;<br> <br> default :<br> XLOG_INFO("ash : Default");<br> BUFFER_PUT_OCTET(0xb, buffer);<br> break;
<br><br>}<br><br> BUFFER_PUT_HOST_16(0, buffer); // Zero the checksum field<br><br><br> // Restore the buffer to include the data<br> BUFFER_RESET_TAIL(buffer);<br> BUFFER_PUT_SKIP(datalen, buffer);<br>
<br> //<br> // Compute the checksum<br> //<br> if (is_ipv6()) {<br> //<br> // XXX: The checksum for IPv6 includes the IPv6 "pseudo-header"<br> // as described in RFC 2460.<br> //<br> size_t ph_len;
<br> if (message_type == PIM_REGISTER)<br> ph_len = PIM_REGISTER_HEADER_LENGTH;<br> else<br> ph_len = BUFFER_DATA_SIZE(buffer);<br> cksum2 = calculate_ipv6_pseudo_header_checksum(src, dst, ph_len,<br>
IPPROTO_PIM);<br> }<br> <br> // XXX: The checksum for PIM_REGISTER excludes the encapsulated data packet<br> switch (message_type) {<br> case PIM_REGISTER:<br> cksum = INET_CKSUM(BUFFER_DATA_HEAD(buffer),
<br> PIM_REGISTER_HEADER_LENGTH);<br> break;<br> default:<br> cksum = INET_CKSUM(BUFFER_DATA_HEAD(buffer), BUFFER_DATA_SIZE(buffer));<br> break;<br> }<br> <br> cksum = INET_CKSUM_ADD(cksum, cksum2);
<br> BUFFER_COPYPUT_INET_CKSUM(cksum, buffer, 2); // XXX: the ckecksum <br> //<br> // Send the message<br> //<br> ret_value = pim_node().pim_send(vif_index(), src, dst, ttl, ip_tos,<br> is_router_alert, buffer, error_msg);
<br> <br> return (ret_value);<br> <br><br>}<br><br><br>/**<br> * PimVif::pim__bidir_df_recv:<br> * @pim_nbr: The PIM neighbor message originator (or NULL if not a neighbor).<br> * @src: The message source address.<br>
* @dst: The message destination address.<br> * @buffer: The buffer with the message.<br> * <br> * Receive PIM_ASSERT message.<br> * <br> * Return value: %XORP_OK on success, otherwise %XORP_ERROR.<br> **/<br>int<br>PimVif::pim_bidir_df_recv(const IPvX& src,const IPvX& dst,int ip_ttl,
<br> int ip_tos,buffer_t *buffer)<br>{<br> <br> uint8_t pim_vt;<br> uint8_t message_type, proto_version,message_subtype;<br> <br> // Ignore my own PIM messages<br>// if (pim_node().is_my_addr(src))
<br>// return (XORP_ERROR);<br> <br> //<br> // Message length check.<br> //<br><br> if (BUFFER_DATA_SIZE(buffer) < PIM_MINLEN) {<br> XLOG_WARNING("RX packet from %s to %s on vif %s: "
<br> "too short data field (%u bytes)",<br> cstring(src), cstring(dst),<br> name().c_str(),<br> XORP_UINT_CAST(BUFFER_DATA_SIZE(buffer)));<br> ++_pimstat_bad_length_messages;
<br> return (XORP_ERROR);<br> }<br> <br> //<br> // Parse the message<br> //<br><br><br> //<br> // Get the message type and PIM protocol version.<br> // XXX: First we need the message type to verify correctly the checksum.
<br> //<br><br> BUFFER_GET_OCTET(pim_vt, buffer);<br> BUFFER_GET_SKIP_REVERSE(1, buffer); // Rewind back<br> <br> <br>proto_version = PIM_VT_V(pim_vt);<br><br><br>// BUFFER_GET_OCTET(pim_vt, buffer);
<br><br> <br> while (BUFFER_DATA_SIZE(buffer) > 0) {<br> BUFFER_GET_OCTET(pim_vt, buffer);<br> message_type = PIM_VT_T(pim_vt);<br> switch(message_type)<br> {<br> case PIM_ALL_DF_ELECTION : <br>
XLOG_INFO("ash : PIM_ALL_DF_ELECTION recvd");<br> break;<br><br> default :<br> XLOG_INFO("ash : Wrong PIM_ALL_DF_ELECTION Election Recvd");
<br> break;<br><br> } <br><br><br> BUFFER_GET_OCTET(message_subtype, buffer);<br> switch(message_subtype)<br> {<br> case DF_OFFER : <br> XLOG_INFO("ash : DF_OFFER recvd");
<br> break;<br><br> case DF_WINNER : <br> XLOG_INFO("ash : DF_WINNER recvd");<br> break;<br><br> case DF_BACKOFF : <br> XLOG_INFO("ash : DF_BACKOFF recvd");
<br> break;<br><br> case DF_PASS : <br> XLOG_INFO("ash : DF_PASS recvd");<br> break;<br><br> default :<br> XLOG_INFO("ash : Wrong DF offers Election Recvd");
<br> break;<br><br> }<br> }<br> //<br> // TODO: check the TTL and TOS if we are running in secure mode<br> //<br> UNUSED(ip_ttl);<br> UNUSED(ip_tos);<br>#if 0
<br> if (ip_ttl != MINTTL) {<br> XLOG_WARNING("RX %s from %s to %s on vif %s: "<br> "ip_ttl = %d instead of %d",<br> PIMTYPE2ASCII(message_type),<br> cstring(src), cstring(dst),
<br> name().c_str(),<br> ip_ttl, MINTTL);<br> ret_value = XORP_ERROR;<br> goto ret_label;<br> }<br>#endif // 0<br><br> return (XORP_OK);<br> <br><br><br><br>}<br>
<br>********************************************************************************************************<br>error :<br><br>pim_bidir_df.cc:110: error: label 'buflen_error' used but not defined<br>pim_bidir_df.cc: In member function 'int PimVif::pim_bidir_df_recv(const IPvX&, const IPvX&, int, int, buffer_t*)':
<br>pim_bidir_df.cc:286: error: label 'rcvlen_error' used but not defined<br>gmake[2]: *** [pim_bidir_df.lo] Error 1<br>gmake[2]: Leaving directory `/root/project/df/xorp-1.3/pim'<br>gmake[1]: *** [all-recursive] Error 1
<br>gmake[1]: Leaving directory `/root/project/df/xorp-1.3'<br>gmake: *** [all] Error 2<br><br><br>********************************************************************************************************<br>Error shown @ following lines :
<br><br>Line No. 110 : BUFFER_PUT_OCTET(pim_vt, buffer); // PIM version and message type<br><br>Line No. 286 : BUFFER_GET_OCTET(pim_vt, buffer);<br><br>************************************************************************
<br><br>Thank you,<br>ashish<br>