Lines Matching refs:TT
114 struct payload_s *send_data4 = (struct payload_s *)(TT.packet);
115 struct icmp *send_icmp4 = (struct icmp *)(TT.packet);
119 send_data4->ident = TT.ident;
120 ((struct sockaddr_in *)&dest)->sin_port = TT.port + seq;
124 send_icmp4->icmp_id = htons(TT.ident);
127 send_icmp4->icmp_cksum = in_cksum((uint16_t *) send_icmp4, TT.msg_len);
132 res = setsockopt(TT.snd_sock, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
135 len = TT.msg_len;
136 res = sendto(TT.snd_sock, out, len, 0, (struct sockaddr *) &dest,
145 struct payload_s *send_data6 = (struct payload_s *) (TT.packet);
148 send_data6->ident = TT.ident;
149 ((struct sockaddr_in6 *)&dest)->sin6_port = TT.port;
151 if (setsockopt(TT.snd_sock, SOL_IPV6, IPV6_UNICAST_HOPS, &ttl,
156 if (sendto(TT.snd_sock, out, TT.msg_len, 0,
175 snprintf(ifr.ifr_name, IFNAMSIZ, "%s", TT.iface);
177 perror_msg("can't bind to interface %s", TT.iface);
199 int seq, fexit, ttl, tv = TT.wait_time * 1000;
204 pfd[0].fd = TT.recv_sock;
207 for (ttl = TT.first_ttl; ttl <= TT.max_ttl; ++ttl) {
216 for (probe = 0, seq = 0; probe < TT.ttl_probes; ++probe) {
220 if (!TT.istraceroute6)
221 if (probe && (toys.optflags & FLAG_z)) msleep(TT.pause_time);
223 if (!TT.istraceroute6) send_probe4(++seq, ttl);
248 rcv_len = recvfrom(TT.recv_sock, toybuf, sizeof(toybuf),
252 if (!TT.istraceroute6) {
274 && hudp->dest == (TT.port + seq))
280 && ricmp->icmp_id == ntohs(TT.ident)
286 && hicmp->icmp_id == htons(TT.ident)
402 if ((pkt->ident == TT.ident) && (pkt->seq == seq))
469 if(!TT.istraceroute6) {
472 || dest_reach || (fexit && fexit >= TT.ttl_probes -1))
474 } else if (dest_reach || (fexit > 0 && fexit >= TT.ttl_probes -1)) break;
488 if (toys.optflags & FLAG_6) TT.istraceroute6 = 1;
489 else TT.istraceroute6 = toys.which->name[10] == '6';
491 if(!TT.istraceroute6 && (toys.optflags & FLAG_g)) {
494 for (node = TT.loose_source; node; node = node->next, lsrr++) {
500 TT.gw_list[lsrr] = sin.sin_addr.s_addr;
502 } else TT.first_ttl = 1;
504 TT.msg_len = pack_size = ICMP_HD_SIZE4; //udp payload is also 8bytes
506 TT.msg_len = atolx_range(toys.optargs[1], pack_size, 32768);//max packet size
508 TT.recv_sock = xsocket((TT.istraceroute6 ? AF_INET6 : AF_INET), SOCK_RAW,
509 (TT.istraceroute6 ? IPPROTO_ICMPV6 : IPPROTO_ICMP));
511 if (TT.istraceroute6) {
514 setsockopt(TT.recv_sock, SOL_IPV6, IPV6_RECVPKTINFO, &set,
516 setsockopt(TT.recv_sock, SOL_IPV6, IPV6_2292PKTINFO, &set,
519 setsockopt(TT.recv_sock, SOL_IPV6, IPV6_PKTINFO, &set, sizeof(set));
522 if (setsockopt(TT.recv_sock, SOL_RAW, IPV6_CHECKSUM, &two,
526 set_flag_dr(TT.recv_sock);
528 if (!TT.istraceroute6) {
530 TT.snd_sock = xsocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
531 else TT.snd_sock = xsocket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
533 if (toys.optflags & FLAG_i) bind_to_interface(TT.snd_sock);
542 TT.gw_list[lsrr] = ((struct sockaddr_in *)&dest)->sin_addr.s_addr;
547 size = lsrr * sizeof(TT.gw_list[0]);
550 memcpy(optlist + 4, TT.gw_list, size);
552 if (setsockopt(TT.snd_sock, IPPROTO_IP, IP_OPTIONS,
553 (char *)optlist, size + sizeof(TT.gw_list[0])) < 0)
556 } else TT.snd_sock = xsocket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
558 if (setsockopt(TT.snd_sock, SOL_SOCKET, SO_SNDBUF, &TT.msg_len,
559 sizeof(TT.msg_len)) < 0) perror_exit("SO_SNDBUF failed ");
561 if (!TT.istraceroute6) {
563 setsockopt(TT.snd_sock, IPPROTO_IP, IP_TOS, &tyser, sizeof(tyser)) < 0)
564 perror_exit("IP_TOS %ld failed ", TT.tos);
568 (setsockopt(TT.snd_sock, IPPROTO_IP, IP_DONTFRAG, &set,
571 } else if (setsockopt(TT.snd_sock, IPPROTO_IPV6, IPV6_TCLASS, &TT.tos,
572 sizeof(TT.tos)) < 0) perror_exit("IPV6_TCLASS %ld failed ", TT.tos);
574 set_flag_dr(TT.snd_sock);
575 TT.packet = xzalloc(TT.msg_len);
576 TT.ident = getpid();
578 if (!TT.istraceroute6) {
579 if (!(toys.optflags & FLAG_U)) TT.ident |= 0x8000;
584 if (!inet_aton(TT.src_ip, &(source.sin_addr)))
585 error_exit("bad address: %s", TT.src_ip);
586 if (setsockopt(TT.snd_sock, IPPROTO_IP, IP_MULTICAST_IF,
589 xbind(TT.snd_sock,(struct sockaddr*)&source, sizeof(struct sockaddr_in));
592 if(TT.first_ttl > TT.max_ttl)
593 error_exit("ERROR :Range for -f is 1 to %ld (max ttl)", TT.max_ttl);
598 if (toys.optflags & FLAG_i) bind_to_interface(TT.snd_sock);
605 if(inet_pton(AF_INET6, TT.src_ip, &(source.sin6_addr)) <= 0)
606 error_exit("bad address: %s", TT.src_ip);
608 xbind(TT.snd_sock,(struct sockaddr*)&source, sizeof(struct sockaddr_in6));
621 xbind(TT.snd_sock, (struct sockaddr*)&prb, sizeof(struct sockaddr_in6));
622 xbind(TT.recv_sock, (struct sockaddr*)&prb, sizeof(struct sockaddr_in6));
630 if (toys.optflags & FLAG_s) xprintf(" from %s",TT.src_ip);
631 xprintf(", %ld hops max, %u byte packets\n", TT.max_ttl, TT.msg_len);