Wireshark-dev: Re: [Wireshark-dev] roofnet v1
From: Nicola Arnoldi <nicola.arnoldi@xxxxxxxxxxxx>
Date: Tue, 09 Jan 2007 12:43:01 +0100
here it is!
Nicola
Il giorno mar, 09/01/2007 alle 12.34 +0100, Sebastien Tandel ha scritto:
> Hi,
>
> Can you send a pcap file for testing purpose, please?
>
>
> Regards,
>
> Sebastien Tandel
>
> Nicola Arnoldi wrote:
> > Hi everybody.
> > The great work Sebastien did about Roofnet dissectors was related to
> > Version 2, which is still far from stable.
> > It should be implemented the V 1 as well, which has some differences
> > between V2.
> > I attach the c++ header, hoping it would be sufficient for you to modify
> > the dissector accordingly.
> >
> > Note that ETHTYPES, which in V2 all started with a 6 (6xx) now start
> > with number 9. (9xx)
> >
> > The message I receive when I try to decode V1 datagrams with the old
> > dissector is something like.
> > Bogus IP header, more payload than told by roofnet...and others.
> >
> > Bye.
> >
> > Nicola
> >
> > ------------------------------------------------------------------------
> >
> > #ifndef CLICK_SRPAKCET_HH
> > #define CLICK_SRPAKCET_HH
> > #include <click/ipaddress.hh>
> > #include <elements/wifi/path.hh>
> > CLICK_DECLS
> >
> > #define max(a, b) ((a) > (b) ? (a) : (b))
> > #define min(a, b) ((a) < (b) ? (a) : (b))
> >
> >
> > enum SRCRPacketType { PT_QUERY = 0x01,
> > PT_REPLY = 0x02,
> > PT_TOP5_RESULT = 0x03,
> > PT_DATA = 0x04,
> > PT_GATEWAY = 0x08
> > };
> >
> >
> >
> > enum SRCRPacketFlags {
> > FLAG_ERROR = (1<<0),
> > FLAG_UPDATE = (1<<1),
> > FLAG_TOP5_REQUEST_RESULT = (1<<2),
> > FLAG_TOP5_BEST_ROUTE = (1<<3),
> > FLAG_SCHEDULE = (1<<4),
> > FLAG_SCHEDULE_TOKEN = (1<<5),
> > FLAG_SCHEDULE_FAKE = (1<<6),
> > FLAG_ECN = (1<<7)
> > };
> >
> > static const uint8_t _sr_version = 0x0b;
> >
> >
> > // Packet format.
> > CLICK_SIZE_PACKED_STRUCTURE(
> > struct srpacket {,
> > uint8_t _version; /* see _srcr_version */
> > uint8_t _type; /* see enum SRCRPacketType */
> > uint8_t _nlinks;
> > uint8_t _next; // Index of next node who should process this packet.
> >
> >
> > uint16_t _ttl;
> > uint16_t _cksum;
> > uint16_t _flags;
> > uint16_t _dlen;
> >
> > /* PT_QUERY
> > * _qdst is used for the query destination in control packets
> > * and a extra 32 bit seq number in data packets
> > */
> > uint32_t _qdst;
> >
> >
> > uint32_t _seq; // seq number
> > uint32_t _seq2; // another seq number
> >
> >
> > /* uin32_t ip[_nlinks] */
> > /* uin32_t metrics[_nlinks] */
> >
> >
> > /* ip */
> > /* fwd */
> > /* rev */
> > /* seq */
> > /* ip */
> >
> > uint32_t _random_from;
> > uint32_t _random_fwd_metric;
> > uint32_t _random_rev_metric;
> > uint32_t _random_seq;
> > uint16_t _random_age;
> > uint32_t _random_to;
> >
> >
> > void set_random_from(IPAddress ip) {
> > _random_from = ip;
> > }
> > void set_random_to(IPAddress ip) {
> > _random_to = ip;
> > }
> > void set_random_fwd_metric(uint32_t m) {
> > _random_fwd_metric = m;
> > }
> >
> > void set_random_rev_metric(uint32_t m) {
> > _random_rev_metric = m;
> > }
> > void set_random_seq(uint32_t s) {
> > _random_seq = s;
> > }
> > void set_random_age(uint32_t s) {
> > _random_age = s;
> > }
> >
> > IPAddress get_random_from() {
> > return _random_from;
> > }
> > IPAddress get_random_to() {
> > return _random_to;
> > }
> > uint32_t get_random_fwd_metric() {
> > return _random_fwd_metric;
> > }
> > uint32_t get_random_rev_metric() {
> > return _random_rev_metric;
> > }
> >
> > uint32_t get_random_seq() {
> > return _random_seq;
> > }
> >
> > uint32_t get_random_age() {
> > return _random_age;
> > }
> >
> >
> > void set_link(int link,
> > IPAddress a, IPAddress b,
> > uint32_t fwd, uint32_t rev,
> > uint32_t seq,
> > uint32_t age) {
> >
> > uint32_t *ndx = (uint32_t *) (this+1);
> > ndx += link * 5;
> >
> > ndx[0] = a;
> > ndx[1] = fwd;
> > ndx[2] = rev;
> > ndx[3] = seq;
> > ndx[4] = age;
> > ndx[5] = b;
> > }
> >
> > uint32_t get_link_fwd(int link) {
> > uint32_t *ndx = (uint32_t *) (this+1);
> > ndx += link * 5;
> > return ndx[1];
> > }
> > uint32_t get_link_rev(int link) {
> > uint32_t *ndx = (uint32_t *) (this+1);
> > ndx += link * 5;
> > return ndx[2];
> > }
> >
> > uint32_t get_link_seq(int link) {
> > uint32_t *ndx = (uint32_t *) (this+1);
> > ndx += link * 5;
> > return ndx[3];
> > }
> >
> > uint32_t get_link_age(int link) {
> > uint32_t *ndx = (uint32_t *) (this+1);
> > ndx += link * 5;
> > return ndx[4];
> > }
> >
> > IPAddress get_link_node(int link) {
> > uint32_t *ndx = (uint32_t *) (this+1);
> > ndx += link * 5;
> > return ndx[0];
> > }
> >
> >
> > void set_link_node(int link, IPAddress ip) {
> > uint32_t *ndx = (uint32_t *) (this+1);
> > ndx += link * 5;
> > ndx[0] = ip;
> > }
> >
> >
> >
> >
> > // How long should the packet be?
> > size_t hlen_wo_data() const { return len_wo_data(_nlinks); }
> > size_t hlen_with_data() const { return len_with_data(_nlinks, ntohs(_dlen)); }
> >
> > static size_t len_wo_data(int nlinks) {
> > return sizeof(struct srpacket) +
> > sizeof(uint32_t) +
> > (nlinks) * sizeof(uint32_t) * 5;
> >
> > }
> > static size_t len_with_data(int nlinks, int dlen) {
> > return len_wo_data(nlinks) + dlen;
> > }
> >
> > int num_links() {
> > return _nlinks;
> > }
> >
> > int next() {
> > return _next;
> > }
> > Path get_path() {
> > Path p;
> > for (int x = 0; x <= num_links(); x++) {
> > p.push_back(get_link_node(x));
> > }
> > return p;
> > }
> > void set_data_seq(uint32_t n) {
> > _qdst = htonl(n);
> > }
> > uint32_t data_seq() {
> > return ntohl(_qdst);
> > }
> > void set_seq(uint32_t n) {
> > _seq = htonl(n);
> > }
> > uint32_t seq() {
> > return ntohl(_seq);
> > }
> >
> > void set_seq2(uint32_t n) {
> > _seq2 = htonl(n);
> > }
> > uint32_t seq2() {
> > return ntohl(_seq2);
> > }
> > void set_next(uint8_t n) {
> > _next = n;
> > }
> >
> > void set_num_links(uint8_t n) {
> > _nlinks = n;
> > }
> > void set_data_len(uint16_t len) {
> > _dlen = htons(len);
> > }
> > uint16_t data_len() {
> > return ntohs(_dlen);
> > }
> >
> >
> > void set_flag(uint16_t f) {
> > uint16_t flags = ntohs(_flags);
> > _flags = htons(flags | f);
> > }
> >
> > bool flag(int f) {
> > int x = ntohs(_flags);
> > return x & f;
> > }
> > void unset_flag(uint16_t f) {
> > uint16_t flags = ntohs(_flags);
> > _flags = htons(flags & !f);
> > }
> >
> >
> > /* remember that if you call this you must have set the number of links in this packet! */
> > u_char *data() { return (((u_char *)this) + len_wo_data(num_links())); }
> >
> >
> > void set_checksum() {
> > unsigned int tlen = 0;
> > if (_type & PT_DATA) {
> > tlen = hlen_with_data();
> > } else {
> > tlen = hlen_wo_data();
> > }
> > _cksum = 0;
> > _cksum = click_in_cksum((unsigned char *) this, tlen);
> > }
> > });
> >
> >
> >
> >
> > #ifndef sr_assert
> > #define sr_assert(e) ((e) ? (void) 0 : sr_assert_(__FILE__, __LINE__, #e))
> > #endif /* sr_assert */
> >
> >
> > inline void
> > sr_assert_(const char *file, int line, const char *expr)
> > {
> > click_chatter("assertion \"%s\" FAILED: file %s, line %d",
> > expr, file, line);
> >
> > #ifdef CLICK_USERLEVEL
> > abort();
> > #endif
> >
> > }
> >
> >
> > CLICK_ENDDECLS
> > #endif /* CLICK_SRPACKET_HH */
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Wireshark-dev mailing list
> > Wireshark-dev@xxxxxxxxxxxxx
> > http://www.wireshark.org/mailman/listinfo/wireshark-dev
> >
>
> _______________________________________________
> Wireshark-dev mailing list
> Wireshark-dev@xxxxxxxxxxxxx
> http://www.wireshark.org/mailman/listinfo/wireshark-dev
Attachment:
roofnet.v1.tar.gz
Description: application/compressed-tar
- References:
- [Wireshark-dev] roofnet v1
- From: Nicola Arnoldi
- Re: [Wireshark-dev] roofnet v1
- From: Sebastien Tandel
- [Wireshark-dev] roofnet v1
- Prev by Date: Re: [Wireshark-dev] roofnet v1
- Next by Date: [Wireshark-dev] text2pcap once again
- Previous by thread: Re: [Wireshark-dev] roofnet v1
- Next by thread: Re: [Wireshark-dev] roofnet v1
- Index(es):