52 uint16_t originator_seqno;
53 linkaddr_t originator;
60 #define PRINTF(...) printf(__VA_ARGS__)
67 send(
struct netflood_conn *c)
69 PRINTF(
"%d.%d: netflood send to ipolite\n",
75 recv_from_ipolite(
struct ipolite_conn *ipolite,
const linkaddr_t *from)
77 struct netflood_conn *c = (
struct netflood_conn *)ipolite;
78 struct netflood_hdr hdr;
80 struct queuebuf *queuebuf;
86 queuebuf = queuebuf_new_from_packetbuf();
89 if(c->u->recv !=
NULL) {
90 if(!(
linkaddr_cmp(&hdr.originator, &c->last_originator) &&
91 hdr.originator_seqno <= c->last_originator_seqno)) {
93 if(c->u->recv(c, from, &hdr.originator, hdr.originator_seqno,
96 if(queuebuf !=
NULL) {
97 queuebuf_to_packetbuf(queuebuf);
98 queuebuf_free(queuebuf);
103 if(hops < HOPS_MAX) {
104 PRINTF(
"%d.%d: netflood rebroadcasting %d.%d/%d (%d.%d/%d) hops %d\n",
106 hdr.originator.u8[0], hdr.originator.u8[1],
107 hdr.originator_seqno,
108 c->last_originator.u8[0], c->last_originator.u8[1],
109 c->last_originator_seqno,
115 c->last_originator_seqno = hdr.originator_seqno;
121 if(queuebuf !=
NULL) {
122 queuebuf_free(queuebuf);
129 struct netflood_conn *c = (
struct netflood_conn *)ipolite;
130 if(c->u->sent !=
NULL) {
138 struct netflood_conn *c = (
struct netflood_conn *)ipolite;
139 if(c->u->dropped !=
NULL) {
147 netflood_open(
struct netflood_conn *c, clock_time_t queue_time,
148 uint16_t channel,
const struct netflood_callbacks *u)
152 c->queue_time = queue_time;
156 netflood_close(
struct netflood_conn *c)
162 netflood_send(
struct netflood_conn *c, uint8_t seqno)
168 c->last_originator_seqno = hdr->originator_seqno = seqno;
170 PRINTF(
"%d.%d: netflood sending '%s'\n",
179 netflood_cancel(
struct netflood_conn *c)