Lines Matching refs:optlen

50 	memcpy(iph + sizeof(struct iphdr), opt->__data, opt->optlen);  in ip_options_build()
82 int optlen; in __ip_options_echo() local
86 if (sopt->optlen == 0) in __ip_options_echo()
93 optlen = sptr[sopt->rr+1]; in __ip_options_echo()
95 dopt->rr = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
96 memcpy(dptr, sptr+sopt->rr, optlen); in __ip_options_echo()
97 if (sopt->rr_needaddr && soffset <= optlen) { in __ip_options_echo()
98 if (soffset + 3 > optlen) in __ip_options_echo()
103 dptr += optlen; in __ip_options_echo()
104 dopt->optlen += optlen; in __ip_options_echo()
107 optlen = sptr[sopt->ts+1]; in __ip_options_echo()
109 dopt->ts = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
110 memcpy(dptr, sptr+sopt->ts, optlen); in __ip_options_echo()
111 if (soffset <= optlen) { in __ip_options_echo()
113 if (soffset + 3 > optlen) in __ip_options_echo()
119 if (soffset + 3 > optlen) in __ip_options_echo()
127 if (soffset + 7 <= optlen) { in __ip_options_echo()
140 dptr += optlen; in __ip_options_echo()
141 dopt->optlen += optlen; in __ip_options_echo()
147 optlen = start[1]; in __ip_options_echo()
150 if (soffset > optlen) in __ip_options_echo()
151 soffset = optlen + 1; in __ip_options_echo()
170 dopt->srr = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
171 dopt->optlen += doffset+3; in __ip_options_echo()
176 optlen = sptr[sopt->cipso+1]; in __ip_options_echo()
177 dopt->cipso = dopt->optlen+sizeof(struct iphdr); in __ip_options_echo()
178 memcpy(dptr, sptr+sopt->cipso, optlen); in __ip_options_echo()
179 dptr += optlen; in __ip_options_echo()
180 dopt->optlen += optlen; in __ip_options_echo()
182 while (dopt->optlen & 3) { in __ip_options_echo()
184 dopt->optlen++; in __ip_options_echo()
199 int l = opt->optlen; in ip_options_fragment()
200 int optlen; in ip_options_fragment() local
211 optlen = optptr[1]; in ip_options_fragment()
212 if (optlen < 2 || optlen > l) in ip_options_fragment()
215 memset(optptr, IPOPT_NOOP, optlen); in ip_options_fragment()
216 l -= optlen; in ip_options_fragment()
217 optptr += optlen; in ip_options_fragment()
250 int optlen, l; in __ip_options_compile() local
259 for (l = opt->optlen; l > 0; ) { in __ip_options_compile()
278 optlen = optptr[1]; in __ip_options_compile()
279 if (optlen < 2 || optlen > l) { in __ip_options_compile()
286 if (optlen < 3) { in __ip_options_compile()
300 if (optptr[2] != 4 || optlen < 7 || ((optlen-3) & 3)) { in __ip_options_compile()
305 if (optlen > 7) in __ip_options_compile()
306 memmove(&optptr[3], &optptr[7], optlen-7); in __ip_options_compile()
316 if (optlen < 3) { in __ip_options_compile()
324 if (optptr[2] <= optlen) { in __ip_options_compile()
325 if (optptr[2]+3 > optlen) { in __ip_options_compile()
344 if (optlen < 4) { in __ip_options_compile()
352 if (optptr[2] <= optlen) { in __ip_options_compile()
354 if (optptr[2]+3 > optlen) { in __ip_options_compile()
366 if (optptr[2]+7 > optlen) { in __ip_options_compile()
380 if (optptr[2]+7 > optlen) { in __ip_options_compile()
423 if (optlen < 4) { in __ip_options_compile()
450 l -= optlen; in __ip_options_compile()
451 optptr += optlen; in __ip_options_compile()
513 sockptr_t data, int optlen) in ip_options_get() argument
517 opt = kzalloc(sizeof(struct ip_options_rcu) + ((optlen + 3) & ~3), in ip_options_get()
521 if (optlen && copy_from_sockptr(opt->opt.__data, data, optlen)) { in ip_options_get()
526 while (optlen & 3) in ip_options_get()
527 opt->opt.__data[optlen++] = IPOPT_END; in ip_options_get()
528 opt->opt.optlen = optlen; in ip_options_get()
529 if (optlen && ip_options_compile(net, &opt->opt, NULL)) { in ip_options_get()