[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