Skip to content

Commit

Permalink
Merge pull request #2216 from cgundogan/rpl_wireshark_dio_malformed_p…
Browse files Browse the repository at this point in the history
…acket

rpl: wrong length of DIO options
  • Loading branch information
fabratu committed Feb 3, 2015
2 parents 9b65000 + c14217c commit e9168b5
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 18 deletions.
26 changes: 14 additions & 12 deletions sys/net/include/rpl/rpl_config.h
Expand Up @@ -48,18 +48,20 @@ enum RPL_MSG_CODE {
};

/* packet base lengths */
#define DIO_BASE_LEN 24
#define DIS_BASE_LEN 2
#define DAO_BASE_LEN 4
#define DAO_D_LEN 24
#define DAO_ACK_LEN 4
#define DAO_ACK_D_LEN 24
#define RPL_OPT_LEN 2
#define RPL_OPT_DODAG_CONF_LEN 16
#define RPL_OPT_PREFIX_INFO_LEN 32
#define RPL_OPT_SOLICITED_INFO_LEN 21
#define RPL_OPT_TARGET_LEN 20
#define RPL_OPT_TRANSIT_LEN 22
#define DIO_BASE_LEN 24
#define DIS_BASE_LEN 2
#define DAO_BASE_LEN 4
#define DAO_D_LEN 24
#define DAO_ACK_LEN 4
#define DAO_ACK_D_LEN 24
#define RPL_OPT_LEN 2
#define RPL_OPT_DODAG_CONF_LEN 14
#define RPL_OPT_DODAG_CONF_LEN_WITH_OPT_LEN (RPL_OPT_DODAG_CONF_LEN + RPL_OPT_LEN)
#define RPL_OPT_PREFIX_INFO_LEN 30
#define RPL_OPT_PREFIX_INFO_LEN_WITH_OPT_LEN (RPL_OPT_PREFIX_INFO_LEN + RPL_OPT_LEN)
#define RPL_OPT_SOLICITED_INFO_LEN 21
#define RPL_OPT_TARGET_LEN 20
#define RPL_OPT_TRANSIT_LEN 22

/* message options */
#define RPL_OPT_PAD1 0
Expand Down
6 changes: 3 additions & 3 deletions sys/net/routing/rpl/rpl_nonstoring/rpl_nonstoring.c
Expand Up @@ -276,7 +276,7 @@ void rpl_send_DIO_mode(ipv6_addr_t *destination)
rpl_send_opt_dodag_conf_buf->default_lifetime = mydodag->default_lifetime;
rpl_send_opt_dodag_conf_buf->lifetime_unit = mydodag->lifetime_unit;

opt_hdr_len += RPL_OPT_DODAG_CONF_LEN;
opt_hdr_len += RPL_OPT_DODAG_CONF_LEN_WITH_OPT_LEN;


uint16_t plen = ICMPV6_HDR_LEN + DIO_BASE_LEN + opt_hdr_len;
Expand Down Expand Up @@ -483,7 +483,7 @@ void rpl_recv_DIO_mode(void)
dio_dodag.default_lifetime = rpl_opt_dodag_conf_buf->default_lifetime;
dio_dodag.lifetime_unit = rpl_opt_dodag_conf_buf->lifetime_unit;
dio_dodag.of = (struct rpl_of_t *) rpl_get_of_for_ocp(rpl_opt_dodag_conf_buf->ocp);
len += RPL_OPT_DODAG_CONF_LEN;
len += RPL_OPT_DODAG_CONF_LEN_WITH_OPT_LEN;
break;
}

Expand All @@ -493,7 +493,7 @@ void rpl_recv_DIO_mode(void)
return;
}

len += RPL_OPT_PREFIX_INFO_LEN;
len += RPL_OPT_PREFIX_INFO_LEN_WITH_OPT_LEN;
break;
}

Expand Down
6 changes: 3 additions & 3 deletions sys/net/routing/rpl/rpl_storing/rpl_storing.c
Expand Up @@ -274,7 +274,7 @@ void rpl_send_DIO_mode(ipv6_addr_t *destination)
rpl_send_opt_dodag_conf_buf->default_lifetime = mydodag->default_lifetime;
rpl_send_opt_dodag_conf_buf->lifetime_unit = mydodag->lifetime_unit;

opt_hdr_len += RPL_OPT_DODAG_CONF_LEN;
opt_hdr_len += RPL_OPT_DODAG_CONF_LEN_WITH_OPT_LEN;

uint16_t plen = ICMPV6_HDR_LEN + DIO_BASE_LEN + opt_hdr_len;
rpl_send(destination, (uint8_t *)icmp_send_buf, plen, IPV6_PROTO_NUM_ICMPV6);
Expand Down Expand Up @@ -514,7 +514,7 @@ void rpl_recv_DIO_mode(void)
dio_dodag.default_lifetime = rpl_opt_dodag_conf_buf->default_lifetime;
dio_dodag.lifetime_unit = rpl_opt_dodag_conf_buf->lifetime_unit;
dio_dodag.of = (struct rpl_of_t *) rpl_get_of_for_ocp(rpl_opt_dodag_conf_buf->ocp);
len += RPL_OPT_DODAG_CONF_LEN;
len += RPL_OPT_DODAG_CONF_LEN_WITH_OPT_LEN;
break;
}

Expand All @@ -524,7 +524,7 @@ void rpl_recv_DIO_mode(void)
return;
}

len += RPL_OPT_PREFIX_INFO_LEN;
len += RPL_OPT_PREFIX_INFO_LEN_WITH_OPT_LEN;
break;
}

Expand Down

0 comments on commit e9168b5

Please sign in to comment.