Lines Matching full:ip
52 #include <netinet/ip.h>
63 struct ip *ipq_hdr;
79 struct ip *ip_hdr;
85 /* Caller must leave room for ethernet and ip headers in front!! */
90 struct ip *ip; in sendip() local
98 ip = (struct ip *)pkt - 1; in sendip()
99 len += sizeof(*ip); in sendip()
101 bzero(ip, sizeof(*ip)); in sendip()
103 ip->ip_v = IPVERSION; /* half-char */ in sendip()
104 ip->ip_hl = sizeof(*ip) >> 2; /* half-char */ in sendip()
105 ip->ip_len = htons(len); in sendip()
106 ip->ip_p = proto; /* char */ in sendip()
107 ip->ip_ttl = IPDEFTTL; /* char */ in sendip()
108 ip->ip_src = d->myip; in sendip()
109 ip->ip_dst = d->destip; in sendip()
110 ip->ip_sum = in_cksum(ip, sizeof(*ip)); /* short, but special */ in sendip()
112 if (ip->ip_dst.s_addr == INADDR_BROADCAST || ip->ip_src.s_addr == 0 || in sendip()
113 netmask == 0 || SAMENET(ip->ip_src, ip->ip_dst, netmask)) in sendip()
114 ea = arpwhohas(d, ip->ip_dst); in sendip()
118 cc = sendether(d, ip, len, ea, ETHERTYPE_IP); in sendip()
123 return (cc - sizeof(*ip)); in sendip()
141 ip_reasm_add(struct ip_reasm *ipr, void *pkt, struct ip *ip) in ip_reasm_add() argument
150 ipq->ipq_hdr = ip; in ip_reasm_add()
154 off_ip = ntohs(ip->ip_off) & IP_OFFMASK; in ip_reasm_add()
171 * p in queue is smaller than ip, check if we need to put in ip_reasm_add()
172 * ip after p or after p->next. in ip_reasm_add()
194 * Receive a IP packet and validate it is for us.
199 struct ip *ip = *payload; in readipv4() local
209 if (n < sizeof(*ip)) { in readipv4()
215 hlen = ip->ip_hl << 2; in readipv4()
216 if (hlen < sizeof(*ip) || in readipv4()
217 in_cksum(ip, hlen) != 0) { in readipv4()
224 if (n < ntohs(ip->ip_len)) { in readipv4()
226 n, ntohs(ip->ip_len))); in readipv4()
232 fragoffset = (ntohs(ip->ip_off) & IP_OFFMASK) * 8; in readipv4()
233 morefrag = (ntohs(ip->ip_off) & IP_MF) == 0 ? false : true; in readipv4()
236 uh = (struct udphdr *)((uintptr_t)ip + sizeof(*ip)); in readipv4()
238 if (d->myip.s_addr && ip->ip_dst.s_addr != d->myip.s_addr) { in readipv4()
241 inet_ntoa(ip->ip_dst), ntohs(uh->uh_dport))); in readipv4()
251 inet_ntoa(ip->ip_src), ntohs(uh->uh_sport), in readipv4()
252 inet_ntoa(ip->ip_dst), ntohs(uh->uh_dport))); in readipv4()
253 /* If there were ip options, make them go away */ in readipv4()
254 if (hlen != sizeof(*ip)) { in readipv4()
255 bcopy(((u_char *)ip) + hlen, uh, in readipv4()
257 ip->ip_len = htons(sizeof(*ip)); in readipv4()
258 n -= hlen - sizeof(*ip); in readipv4()
261 n = (n > (ntohs(ip->ip_len) - sizeof(*ip))) ? in readipv4()
262 ntohs(ip->ip_len) - sizeof(*ip) : n; in readipv4()
264 *payload = (void *)((uintptr_t)ip + sizeof(*ip)); in readipv4()
269 if (ipr->ip_src.s_addr == ip->ip_src.s_addr && in readipv4()
270 ipr->ip_dst.s_addr == ip->ip_dst.s_addr && in readipv4()
271 ipr->ip_id == ip->ip_id && in readipv4()
272 ipr->ip_proto == ip->ip_p) in readipv4()
283 ipr->ip_src = ip->ip_src; in readipv4()
284 ipr->ip_dst = ip->ip_dst; in readipv4()
285 ipr->ip_id = ip->ip_id; in readipv4()
286 ipr->ip_proto = ip->ip_p; in readipv4()
291 __func__, ntohs(ip->ip_id), inet_ntoa(ip->ip_src), in readipv4()
292 inet_ntoa(ip->ip_dst))); in readipv4()
299 if (!ip_reasm_add(ipr, ptr, ip)) { in readipv4()
343 ipr->ip_total_size = n + sizeof(*ip) + sizeof(struct ether_header); in readipv4()
356 /* Fabricate IP header */ in readipv4()
357 ipr->ip_hdr = (struct ip *)((uintptr_t)eh + sizeof(*eh)); in readipv4()
388 __func__, ntohs(ip->ip_id), inet_ntoa(ip->ip_src), in readipv4()
389 inet_ntoa(ip->ip_dst))); in readipv4()
394 * Receive a IP packet.
433 struct ip *ip = data; in readip() local
435 if (ip->ip_v == IPVERSION && /* half char */ in readip()
436 ip->ip_p == proto) { in readip()
452 DEBUG_PRINTF(1, ("%s: IP version or proto. " in readip()
454 __func__, ip->ip_v, ip->ip_p)); in readip()