/*---------------------------------------------------------------------------*/ void queuebuf_free(struct queuebuf *buf) { if(memb_inmemb(&bufmem, buf)) { memb_free(&bufmem, buf); #if QUEUEBUF_STATS --queuebuf_len; #if CONTIKI_TARGET_NETSIM /* node_log("%d %d\n", queuebuf_len, queuebuf_ref_len);*/ #endif /* CONTIKI_TARGET_NETSIM */ #endif /* QUEUEBUF_STATS */ } else if(memb_inmemb(&refbufmem, buf)) { memb_free(&refbufmem, buf); #if QUEUEBUF_STATS --queuebuf_ref_len; #if CONTIKI_TARGET_NETSIM /* node_log("%d %d\n", queuebuf_len, queuebuf_ref_len);*/ #endif /* CONTIKI_TARGET_NETSIM */ #endif /* QUEUEBUF_STATS */ } }
/*---------------------------------------------------------------------------*/ void queuebuf_free(struct queuebuf *buf) { if(memb_inmemb(&bufmem, buf)) { #if WITH_SWAP if(buf->location == IN_RAM) { memb_free(&buframmem, buf->ram_ptr); } else { queuebuf_remove_from_file(buf->swap_id); } #else memb_free(&buframmem, buf->ram_ptr); #endif memb_free(&bufmem, buf); #if QUEUEBUF_STATS --queuebuf_len; printf("#A q=%d\n", queuebuf_len); #endif /* QUEUEBUF_STATS */ #if QUEUEBUF_DEBUG list_remove(queuebuf_list, buf); #endif /* QUEUEBUF_DEBUG */ } else if(memb_inmemb(&refbufmem, buf)) { memb_free(&refbufmem, buf); #if QUEUEBUF_STATS --queuebuf_ref_len; #endif /* QUEUEBUF_STATS */ } }
/*---------------------------------------------------------------------------*/ void * queuebuf_dataptr(struct queuebuf *b) { struct queuebuf_ref *r; if(memb_inmemb(&bufmem, b)) { return b->data; } else if(memb_inmemb(&refbufmem, b)) { r = (struct queuebuf_ref *)b; return r->ref; } return NULL; }
/*---------------------------------------------------------------------------*/ void * queuebuf_dataptr(struct queuebuf *b) { struct queuebuf_ref *r; if(memb_inmemb(&bufmem, b)) { struct queuebuf_data *buframptr = queuebuf_load_to_ram(b); return buframptr->data; } else if(memb_inmemb(&refbufmem, b)) { r = (struct queuebuf_ref *)b; return r->ref; } return NULL; }
/*---------------------------------------------------------------------------*/ void queuebuf_to_packetbuf(struct queuebuf *b) { struct queuebuf_ref *r; if(memb_inmemb(&bufmem, b)) { struct queuebuf_data *buframptr = queuebuf_load_to_ram(b); packetbuf_copyfrom(buframptr->data, buframptr->len); packetbuf_attr_copyfrom(buframptr->attrs, buframptr->addrs); } else if(memb_inmemb(&refbufmem, b)) { r = (struct queuebuf_ref *)b; packetbuf_clear(); packetbuf_copyfrom(r->ref, r->len); packetbuf_hdralloc(r->hdrlen); memcpy(packetbuf_hdrptr(), r->hdr, r->hdrlen); } }
/*---------------------------------------------------------------------------*/ void queuebuf_free(struct queuebuf *buf) { if(memb_inmemb(&bufmem, buf)) { memb_free(&bufmem, buf); #if QUEUEBUF_STATS --queuebuf_len; printf("#A q=%d\n", queuebuf_len); #endif /* QUEUEBUF_STATS */ } else if(memb_inmemb(&refbufmem, buf)) { memb_free(&refbufmem, buf); #if QUEUEBUF_STATS --queuebuf_ref_len; #endif /* QUEUEBUF_STATS */ } }
/*---------------------------------------------------------------------------*/ void * queuebuf_dataptr(struct queuebuf *b) { if(memb_inmemb(&bufmem, b)) { struct queuebuf_data *buframptr = queuebuf_load_to_ram(b); return buframptr->data; } return NULL; }
/*---------------------------------------------------------------------------*/ void queuebuf_to_packetbuf(struct queuebuf *b) { if(memb_inmemb(&bufmem, b)) { struct queuebuf_data *buframptr = queuebuf_load_to_ram(b); packetbuf_copyfrom(buframptr->data, buframptr->len); packetbuf_attr_copyfrom(buframptr->attrs, buframptr->addrs); } }
/*---------------------------------------------------------------------------*/ static struct neighbor_addr * neighbor_addr_get(const rimeaddr_t *addr) { struct neighbor_addr *item; /* check if addr is derived from table, inside memb */ if(memb_inmemb(&neighbor_addr_mem, (char *)addr)) { return (struct neighbor_addr *) (((char *)addr) - offsetof(struct neighbor_addr, addr)); } item = list_head(neighbor_addrs); while(item != NULL) { if(rimeaddr_cmp(addr, &item->addr)) { return item; } item = item->next; } return NULL; }