Go to the documentation of this file.
65 static struct raw_pcb *raw_pcbs;
68 raw_input_match(
struct raw_pcb *pcb,
u8_t broadcast)
72 #if LWIP_IPV4 && LWIP_IPV6
75 #if IP_SOF_BROADCAST_RECV
90 #if IP_SOF_BROADCAST_RECV
94 if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip))) {
128 raw_input(
struct pbuf *p,
struct netif *inp)
130 struct raw_pcb *pcb, *prev;
159 while ((eaten == 0) && (pcb !=
NULL)) {
160 if ((pcb->protocol == proto) && raw_input_match(pcb, broadcast)) {
162 if (pcb->recv !=
NULL) {
163 #ifndef LWIP_NOASSERT
164 void* old_payload = p->
payload;
175 prev->next = pcb->next;
176 pcb->next = raw_pcbs;
181 LWIP_ASSERT(
"raw pcb recv callback altered pbuf payload pointer without eating packet",
210 raw_bind(
struct raw_pcb *pcb,
const ip_addr_t *ipaddr)
212 if ((pcb ==
NULL) || (ipaddr ==
NULL)) {
234 raw_connect(
struct raw_pcb *pcb,
const ip_addr_t *ipaddr)
236 if ((pcb ==
NULL) || (ipaddr ==
NULL)) {
255 raw_recv(
struct raw_pcb *pcb, raw_recv_fn recv,
void *recv_arg)
259 pcb->recv_arg = recv_arg;
276 raw_sendto(
struct raw_pcb *pcb,
struct pbuf *p,
const ip_addr_t *ipaddr)
291 #if LWIP_IPV4 && LWIP_IPV6
313 LWIP_DEBUGF(
RAW_DEBUG, (
"raw_sendto: added header pbuf %p before given pbuf %p\n", (
void *)q, (
void *)p));
318 LWIP_ASSERT(
"Can't restore header we just removed!", 0);
327 netif = ip_route(&pcb->local_ip, ipaddr);
357 src_ip = ip_netif_get_local_ip(
netif, ipaddr);
359 if (src_ip ==
NULL) {
368 src_ip = &pcb->local_ip;
374 if (
IP_IS_V6(ipaddr) && pcb->chksum_reqd) {
376 LWIP_ASSERT(
"Checksum must fit into first pbuf", p->
len >= (pcb->chksum_offset + 2));
382 err = ip_output_if(q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol,
netif);
402 raw_send(
struct raw_pcb *pcb,
struct pbuf *p)
404 return raw_sendto(pcb, p, &pcb->remote_ip);
417 raw_remove(
struct raw_pcb *pcb)
419 struct raw_pcb *pcb2;
421 if (raw_pcbs == pcb) {
423 raw_pcbs = raw_pcbs->next;
426 for (pcb2 = raw_pcbs; pcb2 !=
NULL; pcb2 = pcb2->next) {
428 if (pcb2->next !=
NULL && pcb2->next == pcb) {
430 pcb2->next = pcb->next;
460 memset(pcb, 0,
sizeof(
struct raw_pcb));
461 pcb->protocol = proto;
463 pcb->next = raw_pcbs;
485 raw_new_ip_type(
u8_t type,
u8_t proto)
488 pcb = raw_new(proto);
489 #if LWIP_IPV4 && LWIP_IPV6
507 struct raw_pcb* rpcb;
510 for (rpcb = raw_pcbs; rpcb !=
NULL; rpcb = rpcb->next) {
#define ip_addr_set_ipaddr(dest, src)
#define ip_addr_cmp(addr1, addr2)
#define LWIP_ASSERT(message, assertion)
#define ip_current_dest_addr()
#define IP46_ADDR_ANY(type)
#define IP_IS_ANY_TYPE_VAL(ipaddr)
#define ip_addr_isany(ipaddr)
u8_t pbuf_free(struct pbuf *p)
#define ip_addr_isbroadcast(addr, netif)
void * memp_malloc(memp_t type)
#define IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr)
#define NETIF_SET_HWADDRHINT(netif, hint)
void memp_free(memp_t type, void *mem)
#define ip_addr_debug_print(debug, ipaddr)
#define LWIP_DBG_LEVEL_SERIOUS
#define ip_current_netif()
struct pbuf * pbuf_alloc(pbuf_layer l, u16_t length, pbuf_type type)
#define IP_ADDR_PCB_VERSION_MATCH(addr, pcb)
#define ip_current_src_addr()
#define LWIP_UNUSED_ARG(x)
void pbuf_chain(struct pbuf *head, struct pbuf *tail)
#define ip_addr_copy(dest, src)
#define LWIP_DBG_LEVEL_WARNING
#define IP_SET_TYPE_VAL(ipaddr, iptype)
void * memset(void *dst, int c, size_t length)
#define ip_get_option(pcb, opt)
#define SMEMCPY(dst, src, len)
#define LWIP_DEBUGF(debug, message)
#define IP_HDR_GET_VERSION(ptr)
u8_t pbuf_header(struct pbuf *p, s16_t header_size)
#define IP_GET_TYPE(ipaddr)