29#define DEBUG_RPL_PRINT_DAO_ROUTE_INFOMATION
37#pragma comment(lib,"NetworkStack.lib")
38#pragma comment(lib,"RPLlib.lib")
47#define DEFAULT_DIO_INTERVAL_DOUBLINGS 20
55#define DEFAULT_DIO_INTERVAL_MIN 3
61#define DEFAULT_DIO_REDUNDANCY_CONSTANT 10
66#define DEFAULT_MIN_HOP_RANK_INCREASE 256
67#define DEFAULT_DAO_DELAY 1
70#define RPL_NODE_TYPE_DEFAULT _strdup("ROUTER")
71#define RPL_INSTANCE_ID_DEFAULT 15
72#define RPL_DIOIntervalDoublings_DEFAULT DEFAULT_DIO_INTERVAL_DOUBLINGS
73#define RPL_DIOIntervalMin_DEFAULT DEFAULT_DIO_INTERVAL_MIN
74#define RPL_DIORedundancyConstant_DEFAULT DEFAULT_DIO_REDUNDANCY_CONSTANT
75#define RPL_MinHopRankIncrease_DEFAULT DEFAULT_MIN_HOP_RANK_INCREASE
76#define RPL_DODAGPreference_DEFAULT 0
77#define RPL_DAO_DELAY_DEFAULT DEFAULT_DAO_DELAY
78#define RPL_DIS_INITIAL_DELAY_DEFAULT 200
79#define RPL_DIS_INTERVAL_DEFAULT 100
81#define INFINITE_RANK 0xFFFF
82#define RPL_RANK_ROOT 1
83#define RPL_MINIMUM_RANK_INCREMENT 1
84#define RPL_MAXIMUM_RANK_INCREMENT 16
85#define RPL_DEFAULT_DAG_PREF 0
86#define RPL_DEFAULT_MOP 2
87#define RPL_DEFAULT_POISON_COUNT 4
88#define RPL_DEFAULT_DAO_REMOVE_TIMEOUT (2500*MILLISECOND)
94#define is_rpl_control_packet(packet) ((packet)->nControlDataType/100==NW_PROTOCOL_RPL)
95#define is_rpl_configured(d) (DEVICE_NWLAYER((d)) && DEVICE_NWLAYER((d))->nRoutingProtocolId==NW_PROTOCOL_RPL)
212#define GET_RPL_NODE(d) ((PRPL_NODE)DEVICE_NWROUTINGVAR(d))
300#define rpl_node_has_parent(node, parent) (rpl_node_find_parent(node, parent) != NULL)
306#define rpl_node_has_sibling(node, sibling) (rpl_node_find_sibling(node, sibling) != NULL)
316 #define RPL_IP_TO_STR(ip) ((ip)->str_ip)
void rpl_dis_msg_copy(const NetSim_PACKET *destPacket, const NetSim_PACKET *srcPacket)
void rpl_dio_msg_copy(const NetSim_PACKET *destPacket, const NetSim_PACKET *srcPacket)
bool rpl_node_is_isolated(PRPL_NODE rpl)
void rpl_delete_all_route(NETSIM_ID d)
struct stru_rpl_dodag RPL_DODAG
void rpl_process_dis_msg()
void * get_option_from_msg(PRPL_CTRL_MSG msg, RPL_OPTION_TYPE type)
struct stru_rpl_node RPL_NODE
void update_dodag_config(NETSIM_ID node, PRPL_CTRL_MSG dio_pdu)
void rpl_node_add_sibling(NETSIM_ID d, PRPL_NEIGHBOR sibling)
bool rpl_node_is_joined(PRPL_NODE r)
PRPL_CTRL_MSG get_preferred_dodag_dio_pdu(NETSIM_ID d, bool *same, double time)
void rpl_dis_msg_destroy(NetSim_PACKET *packet)
NetSim_PACKET * create_dis_message(NETSIM_ID ndevid, double time)
void join_dodag_iteration(NETSIM_ID d, PRPL_CTRL_MSG dio_pdu)
void rpl_node_init(NETSIM_ID d)
struct stru_rpl_neighbor RPL_NEIGHBOR
void rpl_dio_pdu_free(PRPL_CTRL_MSG dio)
struct stru_rpl_dodag * PRPL_DODAG
void start_as_root(NETSIM_ID d)
void rpl_add_route_to_parent(NETSIM_ID d, NETSIM_ID parent)
bool rpl_node_is_root(PRPL_NODE r)
void rpl_dao_msg_copy(const NetSim_PACKET *destPacket, const NetSim_PACKET *srcPacket)
void print_rpl_log(char *format,...)
PRPL_NEIGHBOR rpl_node_find_sibling(NETSIM_ID d, NETSIM_ID sibling)
void rpl_dio_msg_destroy(NetSim_PACKET *packet)
PRPL_NEIGHBOR rpl_node_find_parent(NETSIM_ID d, NETSIM_ID parent)
void rpl_process_dao_msg()
void start_dio_poisoning(NETSIM_ID d)
void forget_neighbor_messages(PRPL_NODE rpl)
void rpl_node_remove_all_siblings(NETSIM_ID d)
void rpl_dao_msg_destroy(NetSim_PACKET *packet)
void choose_parents_and_siblings(NETSIM_ID d)
void rpl_trickle_handle_t_timeout()
bool rpl_node_is_poisoning(PRPL_NODE r)
void rpl_process_ctrl_msg()
PRPL_NEIGHBOR rpl_find_neighbor(NETSIM_ID d, NETSIM_ID r)
void update_neighbor_dio_message(PRPL_NEIGHBOR neighbor, PRPL_CTRL_MSG dio_pdu)
void rpl_node_add_parent(NETSIM_ID d, PRPL_NEIGHBOR parent)
NetSim_PACKET * create_current_dio_message(NETSIM_ID ndevId, double time, bool include_dodag_config)
void rpl_trickle_handle_i_timeout()
struct stru_rpl_neighbor * PRPL_NEIGHBOR
void rpl_add_to_neighbor_list()
void rpl_trickle_reset(NETSIM_ID nDevId)
void seq_num_mapping_cleanup()
NetSim_PACKET * create_root_dio_message(NETSIM_ID ndevId, double time, bool include_dodag_config, bool include_seq_num)
void create_and_add_rpl_target_option(NetSim_PACKET *dao_pdu, UINT8 prefix_len, NETSIM_IPAddress dest)
PRPL_DODAG rpl_dodag_create(PRPL_CTRL_MSG dio_pdu)
PRPL_OPTION rpl_option_copy(PRPL_OPTION option)
void rpl_node_send_msg(NETSIM_ID ndevid, NetSim_PACKET *packet)
void free_all_neighbor(PRPL_NODE rpl)
void ** get_all_option_from_msg(PRPL_CTRL_MSG msg, RPL_OPTION_TYPE type, UINT *count)
struct stru_rpl_root RPL_ROOT
PRPL_ROOT get_global_root_info()
NetSim_PACKET * create_dao_message(NETSIM_ID ndevid, double time, NETSIM_ID parent)
void rpl_option_destroy(PRPL_OPTION option)
seq_num_mapping_t * seq_num_mapping_get(NETSIM_IPAddress dodag_id)
void rpl_node_remove_all_parents(NETSIM_ID d)
void rpl_dao_route_timeout()
void rpl_dodag_destroy(PRPL_DODAG dodag)
void rpl_process_dio_msg()
PRPL_CTRL_MSG rpl_dio_pdu_duplicate(PRPL_CTRL_MSG dio)
struct stru_rpl_node * PRPL_NODE
struct stru_rpl_root * PRPL_ROOT
enum enum_rpl_option_type RPL_OPTION_TYPE
NETSIM_IPAddress dodag_id
UINT8 dio_redundancy_constant
PRPL_NEIGHBOR pref_parent
PRPL_NEIGHBOR * sibling_list
PRPL_NEIGHBOR * parent_list
UINT8 dio_interval_doublings
unsigned long long int trickle_t_eventid
unsigned long long int trickle_i_eventid
double last_trickle_t_schedule_time
double last_trickle_i_schedule_time
double last_dio_send_time
PRPL_NEIGHBOR * neighbor_list
UINT8 poison_count_so_far
struct stru_rpl_node::stru_trickle trickle
unsigned long long int dao_send_eventid
DODAGID configured_dodag_id
UINT8 dio_interval_doublings
UINT8 dio_redundancy_constant