Lines Matching defs:cmsg
77 } cmsg;
105 "\t\t-Q val Set SO_PRIORITY via cmsg\n"
108 "\t\t-f val Set don't fragment via cmsg\n"
110 "\t\t-c val Set TOS/TCLASS via cmsg\n"
112 "\t\t-l val Set TTL/HOPLIMIT via cmsg\n"
178 opt.cmsg.dontfrag.ena = true;
179 opt.cmsg.dontfrag.val = atoi(optarg);
185 opt.cmsg.tclass.ena = true;
186 opt.cmsg.tclass.val = atoi(optarg);
192 opt.cmsg.hlimit.ena = true;
193 opt.cmsg.hlimit.val = atoi(optarg);
199 opt.cmsg.exthdr.ena = true;
202 opt.cmsg.exthdr.val = IPV6_HOPOPTS;
205 opt.cmsg.exthdr.val = IPV6_DSTOPTS;
208 opt.cmsg.exthdr.val = IPV6_RTHDRDSTOPTS;
241 struct cmsghdr *cmsg;
246 cmsg = (struct cmsghdr *)(cbuf + *cmsg_len);
249 error(ERN_CMSG_WR, EFAULT, "cmsg buffer too small");
251 cmsg->cmsg_level = level;
252 cmsg->cmsg_type = optname;
253 cmsg->cmsg_len = CMSG_LEN(sizeof(__u32));
254 *(__u32 *)CMSG_DATA(cmsg) = uopt->val;
260 struct cmsghdr *cmsg;
273 SOL_IP, IP_TOS, &opt.cmsg.tclass);
275 SOL_IP, IP_TTL, &opt.cmsg.hlimit);
278 SOL_IPV6, IPV6_DONTFRAG, &opt.cmsg.dontfrag);
280 SOL_IPV6, IPV6_TCLASS, &opt.cmsg.tclass);
282 SOL_IPV6, IPV6_HOPLIMIT, &opt.cmsg.hlimit);
292 cmsg = (struct cmsghdr *)(cbuf + cmsg_len);
295 error(ERN_CMSG_WR, EFAULT, "cmsg buffer too small");
297 cmsg->cmsg_level = SOL_SOCKET;
298 cmsg->cmsg_type = SCM_TXTIME;
299 cmsg->cmsg_len = CMSG_LEN(sizeof(txtime));
300 memcpy(CMSG_DATA(cmsg), &txtime, sizeof(txtime));
303 cmsg = (struct cmsghdr *)(cbuf + cmsg_len);
306 error(ERN_CMSG_WR, EFAULT, "cmsg buffer too small");
308 cmsg->cmsg_level = SOL_SOCKET;
309 cmsg->cmsg_type = SO_TIMESTAMPING;
310 cmsg->cmsg_len = CMSG_LEN(sizeof(__u32));
311 *(__u32 *)CMSG_DATA(cmsg) = SOF_TIMESTAMPING_TX_SCHED |
314 if (opt.cmsg.exthdr.ena) {
315 cmsg = (struct cmsghdr *)(cbuf + cmsg_len);
318 error(ERN_CMSG_WR, EFAULT, "cmsg buffer too small");
320 cmsg->cmsg_level = SOL_IPV6;
321 cmsg->cmsg_type = opt.cmsg.exthdr.val;
322 cmsg->cmsg_len = CMSG_LEN(8);
323 *(__u64 *)CMSG_DATA(cmsg) = 0;
351 struct cmsghdr *cmsg;
371 for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL;
372 cmsg = CMSG_NXTHDR(msg, cmsg)) {
373 if (cmsg->cmsg_level == SOL_SOCKET &&
374 cmsg->cmsg_type == SO_TIMESTAMPING_OLD) {
375 if (cmsg->cmsg_len < sizeof(*ts))
376 error(ERN_CMSG_RD, EINVAL, "TS cmsg");
378 ts = (void *)CMSG_DATA(cmsg);
380 if ((cmsg->cmsg_level == SOL_IP &&
381 cmsg->cmsg_type == IP_RECVERR) ||
382 (cmsg->cmsg_level == SOL_IPV6 &&
383 cmsg->cmsg_type == IPV6_RECVERR)) {
384 if (cmsg->cmsg_len < sizeof(*see))
385 error(ERN_CMSG_RD, EINVAL, "sock_err cmsg");
387 see = (void *)CMSG_DATA(cmsg);
392 error(ERN_CMSG_RCV, ENOENT, "TS cmsg not found");
394 error(ERN_CMSG_RCV, ENOENT, "sock_err cmsg not found");