From 2f28ceeb34d0de48ec59674099ac4ecbc1d15d8c Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Wed, 14 May 2014 19:02:00 +0000 Subject: [PATCH] Bind ip/tcp/udp provider translators and symbols to the same versions as in illumos, rather than using "1.0" everywhere. Some of the translators use D functions that are not present in version 1.0 (e.g. inet_ntoa()) which can result in libdtrace crashing when running scripts that restrict themselves to version 1.0 (e.g. with "-x version=1.0"). MFC after: 1 week --- cddl/lib/libdtrace/ip.d | 60 ++++++++++++++++++++-------------------- cddl/lib/libdtrace/tcp.d | 50 ++++++++++++++++----------------- cddl/lib/libdtrace/udp.d | 4 +-- 3 files changed, 57 insertions(+), 57 deletions(-) diff --git a/cddl/lib/libdtrace/ip.d b/cddl/lib/libdtrace/ip.d index b886a0ad2543..a1a2996362fd 100644 --- a/cddl/lib/libdtrace/ip.d +++ b/cddl/lib/libdtrace/ip.d @@ -125,53 +125,53 @@ typedef struct ipv6info { ip6_t *ipv6_hdr; /* pointer to raw header */ } ipv6info_t; -#pragma D binding "1.0" IPPROTO_IP +#pragma D binding "1.5" IPPROTO_IP inline short IPPROTO_IP = 0; -#pragma D binding "1.0" IPPROTO_ICMP +#pragma D binding "1.5" IPPROTO_ICMP inline short IPPROTO_ICMP = 1; -#pragma D binding "1.0" IPPROTO_IGMP +#pragma D binding "1.5" IPPROTO_IGMP inline short IPPROTO_IGMP = 2; -#pragma D binding "1.0" IPPROTO_IPV4 +#pragma D binding "1.5" IPPROTO_IPV4 inline short IPPROTO_IPV4 = 4; -#pragma D binding "1.0" IPPROTO_TCP +#pragma D binding "1.5" IPPROTO_TCP inline short IPPROTO_TCP = 6; -#pragma D binding "1.0" IPPROTO_UDP +#pragma D binding "1.5" IPPROTO_UDP inline short IPPROTO_UDP = 17; -#pragma D binding "1.0" IPPROTO_IPV6 +#pragma D binding "1.5" IPPROTO_IPV6 inline short IPPROTO_IPV6 = 41; -#pragma D binding "1.0" IPPROTO_ROUTING +#pragma D binding "1.5" IPPROTO_ROUTING inline short IPPROTO_ROUTING = 43; -#pragma D binding "1.0" IPPROTO_FRAGMENT +#pragma D binding "1.5" IPPROTO_FRAGMENT inline short IPPROTO_FRAGMENT = 44; -#pragma D binding "1.0" IPPROTO_RSVP +#pragma D binding "1.5" IPPROTO_RSVP inline short IPPROTO_RSVP = 46; -#pragma D binding "1.0" IPPROTO_GRE +#pragma D binding "1.5" IPPROTO_GRE inline short IPPROTO_GRE = 47; -#pragma D binding "1.0" IPPROTO_ESP +#pragma D binding "1.5" IPPROTO_ESP inline short IPPROTO_ESP = 50; -#pragma D binding "1.0" IPPROTO_AH +#pragma D binding "1.5" IPPROTO_AH inline short IPPROTO_AH = 51; -#pragma D binding "1.0" IPPROTO_MOBILE +#pragma D binding "1.5" IPPROTO_MOBILE inline short IPPROTO_MOBILE = 55; -#pragma D binding "1.0" IPPROTO_ICMPV6 +#pragma D binding "1.5" IPPROTO_ICMPV6 inline short IPPROTO_ICMPV6 = 58; -#pragma D binding "1.0" IPPROTO_DSTOPTS +#pragma D binding "1.5" IPPROTO_DSTOPTS inline short IPPROTO_DSTOPTS = 60; -#pragma D binding "1.0" IPPROTO_ETHERIP +#pragma D binding "1.5" IPPROTO_ETHERIP inline short IPPROTO_ETHERIP = 97; -#pragma D binding "1.0" IPPROTO_PIM +#pragma D binding "1.5" IPPROTO_PIM inline short IPPROTO_PIM = 103; -#pragma D binding "1.0" IPPROTO_IPCOMP +#pragma D binding "1.5" IPPROTO_IPCOMP inline short IPPROTO_IPCOMP = 108; -#pragma D binding "1.0" IPPROTO_SCTP +#pragma D binding "1.5" IPPROTO_SCTP inline short IPPROTO_SCTP = 132; -#pragma D binding "1.0" IPPROTO_RAW +#pragma D binding "1.5" IPPROTO_RAW inline short IPPROTO_RAW = 255; inline uint8_t INP_IPV4 = 0x01; inline uint8_t INP_IPV6 = 0x02; -#pragma D binding "1.0" protocols +#pragma D binding "1.5" protocols inline string protocols[int proto] = proto == IPPROTO_IP ? "IP" : proto == IPPROTO_ICMP ? "ICMP" : @@ -200,12 +200,12 @@ inline string protocols[int proto] = * This field is always NULL according to the current definition of the ip * probes. */ -#pragma D binding "1.0" translator +#pragma D binding "1.5" translator translator pktinfo_t < void *p > { pkt_addr = NULL; }; -#pragma D binding "1.0" translator +#pragma D binding "1.5" translator translator csinfo_t < void *p > { cs_addr = NULL; cs_cid = (uint64_t)p; @@ -213,7 +213,7 @@ translator csinfo_t < void *p > { cs_zoneid = 0; }; -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator csinfo_t < struct inpcb *p > { cs_addr = NULL; cs_cid = (uint64_t)p; @@ -221,7 +221,7 @@ translator csinfo_t < struct inpcb *p > { cs_zoneid = 0; }; -#pragma D binding "1.0" translator +#pragma D binding "1.5" translator translator ipinfo_t < uint8_t *p > { ip_ver = p == NULL ? 0 : ((struct ip *)p)->ip_v; ip_plength = p == NULL ? 0 : @@ -238,17 +238,17 @@ translator ipinfo_t < uint8_t *p > { inet_ntoa6(&((struct ip6_hdr *)p)->ip6_dst); }; -#pragma D binding "1.0" IFF_LOOPBACK +#pragma D binding "1.5" IFF_LOOPBACK inline int IFF_LOOPBACK = 0x8; -#pragma D binding "1.0" translator +#pragma D binding "1.5" translator translator ifinfo_t < struct ifnet *p > { if_name = p->if_xname; if_local = (p->if_flags & IFF_LOOPBACK) == 0 ? 0 : 1; if_addr = (uintptr_t)p; }; -#pragma D binding "1.0" translator +#pragma D binding "1.5" translator translator ipv4info_t < struct ip *p > { ipv4_ver = p == NULL ? 0 : p->ip_v; ipv4_ihl = p == NULL ? 0 : p->ip_hl; @@ -268,7 +268,7 @@ translator ipv4info_t < struct ip *p > { ipv4_hdr = (ipha_t *)p; }; -#pragma D binding "1.0" translator +#pragma D binding "1.5" translator translator ipv6info_t < struct ip6_hdr *p > { ipv6_ver = p == NULL ? 0 : (ntohl(p->ip6_ctlun.ip6_un1.ip6_un1_flow) & 0xf0000000) >> 28; ipv6_tclass = p == NULL ? 0 : (ntohl(p->ip6_ctlun.ip6_un1.ip6_un1_flow) & 0x0ff00000) >> 20; diff --git a/cddl/lib/libdtrace/tcp.d b/cddl/lib/libdtrace/tcp.d index 4204507dc3eb..7695e222a089 100644 --- a/cddl/lib/libdtrace/tcp.d +++ b/cddl/lib/libdtrace/tcp.d @@ -31,49 +31,49 @@ /* * Convert a TCP state value to a string. */ -#pragma D binding "1.0" TCPS_CLOSED +#pragma D binding "1.6.3" TCPS_CLOSED inline int TCPS_CLOSED = 0; -#pragma D binding "1.0" TCPS_LISTEN +#pragma D binding "1.6.3" TCPS_LISTEN inline int TCPS_LISTEN = 1; -#pragma D binding "1.0" TCPS_SYN_SENT +#pragma D binding "1.6.3" TCPS_SYN_SENT inline int TCPS_SYN_SENT = 2; -#pragma D binding "1.0" TCPS_SYN_RECEIVED +#pragma D binding "1.6.3" TCPS_SYN_RECEIVED inline int TCPS_SYN_RECEIVED = 3; -#pragma D binding "1.0" TCPS_ESTABLISHED +#pragma D binding "1.6.3" TCPS_ESTABLISHED inline int TCPS_ESTABLISHED = 4; -#pragma D binding "1.0" TCPS_CLOSE_WAIT +#pragma D binding "1.6.3" TCPS_CLOSE_WAIT inline int TCPS_CLOSE_WAIT = 5; -#pragma D binding "1.0" TCPS_FIN_WAIT_1 +#pragma D binding "1.6.3" TCPS_FIN_WAIT_1 inline int TCPS_FIN_WAIT_1 = 6; -#pragma D binding "1.0" TCPS_CLOSING +#pragma D binding "1.6.3" TCPS_CLOSING inline int TCPS_CLOSING = 7; -#pragma D binding "1.0" TCPS_LAST_ACK +#pragma D binding "1.6.3" TCPS_LAST_ACK inline int TCPS_LAST_ACK = 8; -#pragma D binding "1.0" TCPS_FIN_WAIT_2 +#pragma D binding "1.6.3" TCPS_FIN_WAIT_2 inline int TCPS_FIN_WAIT_2 = 9; -#pragma D binding "1.0" TCPS_TIME_WAIT +#pragma D binding "1.6.3" TCPS_TIME_WAIT inline int TCPS_TIME_WAIT = 10; /* TCP segment flags. */ -#pragma D binding "1.0" TH_FIN +#pragma D binding "1.6.3" TH_FIN inline uint8_t TH_FIN = 0x01; -#pragma D binding "1.0" TH_SYN +#pragma D binding "1.6.3" TH_SYN inline uint8_t TH_SYN = 0x02; -#pragma D binding "1.0" TH_RST +#pragma D binding "1.6.3" TH_RST inline uint8_t TH_RST = 0x04; -#pragma D binding "1.0" TH_PUSH +#pragma D binding "1.6.3" TH_PUSH inline uint8_t TH_PUSH = 0x08; -#pragma D binding "1.0" TH_ACK +#pragma D binding "1.6.3" TH_ACK inline uint8_t TH_ACK = 0x10; -#pragma D binding "1.0" TH_URG +#pragma D binding "1.6.3" TH_URG inline uint8_t TH_URG = 0x20; -#pragma D binding "1.0" TH_ECE +#pragma D binding "1.6.3" TH_ECE inline uint8_t TH_ECE = 0x40; -#pragma D binding "1.0" TH_CWR +#pragma D binding "1.6.3" TH_CWR inline uint8_t TH_CWR = 0x80; /* TCP connection state strings. */ -#pragma D binding "1.0" tcp_state_string +#pragma D binding "1.6.3" tcp_state_string inline string tcp_state_string[int32_t state] = state == TCPS_CLOSED ? "state-closed" : state == TCPS_LISTEN ? "state-listen" : @@ -160,7 +160,7 @@ typedef struct tcpinfoh { struct tcphdr *tcp_hdr; /* raw TCP header */ } tcpinfoh_t; -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator csinfo_t < struct tcpcb *p > { cs_addr = NULL; cs_cid = (uint64_t)(p == NULL ? 0 : p->t_inpcb); @@ -168,7 +168,7 @@ translator csinfo_t < struct tcpcb *p > { cs_zoneid = 0; }; -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator tcpsinfo_t < struct tcpcb *p > { tcps_addr = (uintptr_t)p; tcps_local = -1; /* XXX */ @@ -202,7 +202,7 @@ translator tcpsinfo_t < struct tcpcb *p > { tcps_retransmit = p == NULL ? -1 : p->t_rxtshift > 0 ? 1 : 0; }; -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator tcpinfo_t < struct tcphdr *p > { tcp_sport = p == NULL ? 0 : ntohs(p->th_sport); tcp_dport = p == NULL ? 0 : ntohs(p->th_dport); @@ -221,7 +221,7 @@ translator tcpinfo_t < struct tcphdr *p > { * number, acknowledgement number, window size and urgent pointer are already * in host order and thus don't need to be converted. */ -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator tcpinfoh_t < struct tcphdr *p > { tcp_sport = p == NULL ? 0 : ntohs(p->th_sport); tcp_dport = p == NULL ? 0 : ntohs(p->th_dport); @@ -235,7 +235,7 @@ translator tcpinfoh_t < struct tcphdr *p > { tcp_hdr = (struct tcphdr *)p; }; -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator tcplsinfo_t < int s > { tcps_state = s; }; diff --git a/cddl/lib/libdtrace/udp.d b/cddl/lib/libdtrace/udp.d index 5ad625de1bc6..21538eb0ef3c 100644 --- a/cddl/lib/libdtrace/udp.d +++ b/cddl/lib/libdtrace/udp.d @@ -50,7 +50,7 @@ typedef struct udpinfo { struct udphdr *udp_hdr; /* raw UDP header */ } udpinfo_t; -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator udpsinfo_t < struct inpcb *p > { udps_addr = (uintptr_t)p; udps_lport = p == NULL ? 0 : ntohs(p->inp_inc.inc_ie.ie_lport); @@ -65,7 +65,7 @@ translator udpsinfo_t < struct inpcb *p > { inet_ntoa6(&p->inp_inc.inc_ie.ie_dependfaddr.ie6_foreign); }; -#pragma D binding "1.0" translator +#pragma D binding "1.6.3" translator translator udpinfo_t < struct udphdr *p > { udp_sport = p == NULL ? 0 : ntohs(p->uh_sport); udp_dport = p == NULL ? 0 : ntohs(p->uh_dport);