I deeply apologize if this is a double post, but I had issues when I
was signing up for the mailing list(mistyped my email), so I don't
think my first post got to the list.

Hello,
    I'm working with the DSR implementation in ns2.27 (I'm using an
older version because I hope to use a multi-rate 802.11 mac
implementation that was written for this version).  Right now I've
left the mac stuff untouched and I'm concentrating on implementing the
FRESH metric in the DSR implementation.  In a nutshell FRESH optimizes
the route discovery broadcasts of DSR so that they're targeted toward
the destination, (paper:
http://www.sigmobile.org/mobihoc/2003/papers/p257-dubois.pdf ).  I'm
using a 100 node simulation with random waypoint mobility generated
via the ns setdest program and a single TCP flow and 2000 second
simulation time.  FRESH is able to find a route just fine and delever
tcp traffic and it handles route errors, but about 800 seconds into
the simulation I get an error "check_pktRTS:Invalid MAC Control
subtype" which I tracked down to a failed switch statement in
mac-802_11.cc/int Mac802_11::check_pktRTS().  From what I can tell
this switch statement is supposed to be checking that the RTS (Request
to Send I'm assuming) packet has be created correctly.

Using gdb I've compared the mh of a check_pktRTS() that doesn't fail

(gdb) print *mh
$5 = {dh_fc = {fc_subtype = 11 '\v', fc_type = 1 '\001',
    fc_protocol_version = 0 '\0', fc_order = 0 '\0', fc_wep = 0 '\0',
    fc_more_data = 0 '\0', fc_pwr_mgt = 0 '\0', fc_retry = 0 '\0',
    fc_more_frag = 0 '\0', fc_from_ds = 0 '\0', fc_to_ds = 0 '\0'},
  dh_duration = 1278, dh_ra = "\000\000\000\022\000",
  dh_ta = "\000\000\000\025\000", dh_3a = "\000\000\000\000\000",
  dh_scontrol = 0, dh_body = 0xa0569f8 ""}

to one that does fail

(gdb) print *mh
$6 = {dh_fc = {fc_subtype = 0 '\0', fc_type = 0 '\0',
    fc_protocol_version = 0 '\0', fc_order = 0 '\0', fc_wep = 0 '\0',
    fc_more_data = 0 '\0', fc_pwr_mgt = 0 '\0', fc_retry = 0 '\0',
    fc_more_frag = 0 '\0', fc_from_ds = 0 '\0', fc_to_ds = 0 '\0'},
  dh_duration = 0, dh_ra = "\000\000\000\000\000",
  dh_ta = "\000\000\000\000\000", dh_3a = "\000\000\000\000\000",
  dh_scontrol = 0, dh_body = 0xa87b188 ""}

googling and searching of this list archives didn't yield an answer to
what's going on here, seems no one has run into this before, though
there are a lot of references to other issues with this MAC
implementation.  It seems that the RTS packet should be generated in
sendRTS, but somehow this check_pktRTS is getting a RTS that is not
null since it doesn't fail the assert at the begging of that function,
which seems to indicate sendRTS WAS called, but the header information
is empty which seems to indicate the sendRTS WASN'T called.
Especially, since I didn't change anything in the MAC implementation
I'm at a loss as to what's going on.

Any help that anyone could offer would be greatly appreciated,
Ryan

Reply via email to