Lines Matching refs:optlen

48 	memcpy(iph+sizeof(struct iphdr), opt->__data, opt->optlen);  in ip_options_build()
94 int optlen; in ip_options_echo() local
101 if (sopt->optlen == 0) in ip_options_echo()
110 optlen = sptr[sopt->rr+1]; in ip_options_echo()
112 dopt->rr = dopt->optlen + sizeof(struct iphdr); in ip_options_echo()
113 memcpy(dptr, sptr+sopt->rr, optlen); in ip_options_echo()
114 if (sopt->rr_needaddr && soffset <= optlen) { in ip_options_echo()
115 if (soffset + 3 > optlen) in ip_options_echo()
120 dptr += optlen; in ip_options_echo()
121 dopt->optlen += optlen; in ip_options_echo()
124 optlen = sptr[sopt->ts+1]; in ip_options_echo()
126 dopt->ts = dopt->optlen + sizeof(struct iphdr); in ip_options_echo()
127 memcpy(dptr, sptr+sopt->ts, optlen); in ip_options_echo()
128 if (soffset <= optlen) { in ip_options_echo()
130 if (soffset + 3 > optlen) in ip_options_echo()
136 if (soffset + 3 > optlen) in ip_options_echo()
144 if (soffset + 7 <= optlen) { in ip_options_echo()
157 dptr += optlen; in ip_options_echo()
158 dopt->optlen += optlen; in ip_options_echo()
164 optlen = start[1]; in ip_options_echo()
167 if (soffset > optlen) in ip_options_echo()
168 soffset = optlen + 1; in ip_options_echo()
188 dopt->srr = dopt->optlen + sizeof(struct iphdr); in ip_options_echo()
189 dopt->optlen += doffset+3; in ip_options_echo()
194 optlen = sptr[sopt->cipso+1]; in ip_options_echo()
195 dopt->cipso = dopt->optlen+sizeof(struct iphdr); in ip_options_echo()
196 memcpy(dptr, sptr+sopt->cipso, optlen); in ip_options_echo()
197 dptr += optlen; in ip_options_echo()
198 dopt->optlen += optlen; in ip_options_echo()
200 while (dopt->optlen & 3) { in ip_options_echo()
202 dopt->optlen++; in ip_options_echo()
217 int l = opt->optlen; in ip_options_fragment()
218 int optlen; in ip_options_fragment() local
229 optlen = optptr[1]; in ip_options_fragment()
230 if (optlen<2 || optlen>l) in ip_options_fragment()
233 memset(optptr, IPOPT_NOOP, optlen); in ip_options_fragment()
234 l -= optlen; in ip_options_fragment()
235 optptr += optlen; in ip_options_fragment()
256 int optlen; in ip_options_compile() local
267 for (l = opt->optlen; l > 0; ) { in ip_options_compile()
282 optlen = optptr[1]; in ip_options_compile()
283 if (optlen<2 || optlen>l) { in ip_options_compile()
290 if (optlen < 3) { in ip_options_compile()
304 if (optptr[2] != 4 || optlen < 7 || ((optlen-3) & 3)) { in ip_options_compile()
309 if (optlen > 7) in ip_options_compile()
310 memmove(&optptr[3], &optptr[7], optlen-7); in ip_options_compile()
320 if (optlen < 3) { in ip_options_compile()
328 if (optptr[2] <= optlen) { in ip_options_compile()
329 if (optptr[2]+3 > optlen) { in ip_options_compile()
347 if (optlen < 4) { in ip_options_compile()
355 if (optptr[2] <= optlen) { in ip_options_compile()
426 if (optlen < 4) { in ip_options_compile()
453 l -= optlen; in ip_options_compile()
454 optptr += optlen; in ip_options_compile()
500 static struct ip_options_rcu *ip_options_get_alloc(const int optlen) in ip_options_get_alloc() argument
502 return kzalloc(sizeof(struct ip_options_rcu) + ((optlen + 3) & ~3), in ip_options_get_alloc()
507 struct ip_options_rcu *opt, int optlen) in ip_options_get_finish() argument
509 while (optlen & 3) in ip_options_get_finish()
510 opt->opt.__data[optlen++] = IPOPT_END; in ip_options_get_finish()
511 opt->opt.optlen = optlen; in ip_options_get_finish()
512 if (optlen && ip_options_compile(net, &opt->opt, NULL)) { in ip_options_get_finish()
522 unsigned char __user *data, int optlen) in ip_options_get_from_user() argument
524 struct ip_options_rcu *opt = ip_options_get_alloc(optlen); in ip_options_get_from_user()
528 if (optlen && copy_from_user(opt->opt.__data, data, optlen)) { in ip_options_get_from_user()
532 return ip_options_get_finish(net, optp, opt, optlen); in ip_options_get_from_user()
536 unsigned char *data, int optlen) in ip_options_get() argument
538 struct ip_options_rcu *opt = ip_options_get_alloc(optlen); in ip_options_get()
542 if (optlen) in ip_options_get()
543 memcpy(opt->opt.__data, data, optlen); in ip_options_get()
544 return ip_options_get_finish(net, optp, opt, optlen); in ip_options_get()