<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
There are no xfails to be removed because the test.x file in test/unittest/ip already caused those tests not to even be tried. So they were never xfailed.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
But I did overlook test/demo/ip. I'll fix that.</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Eugene Loh via DTrace-devel <dtrace-devel@oss.oracle.com><br>
<b>Sent:</b> Friday, September 22, 2023 12:01 PM<br>
<b>To:</b> dtrace-devel@oss.oracle.com <dtrace-devel@oss.oracle.com><br>
<b>Subject:</b> Re: [DTrace-devel] [PATCH v3] Implement the ip provider</font>
<div> </div>
</div>
<div>
<p>Reviewed-by: Eugene Loh <a class="x_moz-txt-link-rfc2396E" href="mailto:eugene.loh@oracle.com">
<eugene.loh@oracle.com></a><br>
<br>
but shouldn't such a patch have a bunch of xfails removed? Or some other indication that tests are passing?<br>
<br>
And how about test.x being removed? We do not usually have such a file.<br>
</p>
<div class="x_moz-cite-prefix">On 9/22/23 09:30, Kris Van Hees wrote:<br>
</div>
<blockquote type="cite">
<div class="x_elementToProof x_ContentPasted0">
<div><span>This patch also resolves the issue of ipaddr_t not being a known type</span><br>
</div>
<div class="x_ContentPasted0">because ip.d provides a definition for it.</div>
<div><br class="x_ContentPasted0">
</div>
<div class="x_ContentPasted0">Orabug: 34855291</div>
<div class="x_ContentPasted0">Signed-off-by: Kris Van Hees <a class="x_moz-txt-link-rfc2396E" href="mailto:kris.van.hees@oracle.com">
<kris.van.hees@oracle.com></a></div>
<div class="x_ContentPasted0">---</div>
<div class="x_ContentPasted0"> libdtrace/Build | 4 +-</div>
<div class="x_ContentPasted0"> libdtrace/dt_open.c | 3 +-</div>
<div class="x_ContentPasted0"> libdtrace/dt_prov_ip.c | 184 ++++++++++++++++++++++++++++</div>
<div class="x_ContentPasted0"> libdtrace/dt_provider.h | 1 +</div>
<div class="x_ContentPasted0"> libdtrace/ip.d | 6 +-</div>
<div class="x_ContentPasted0"> test/demo/ip/ipproto.d | 3 +-</div>
<div class="x_ContentPasted0"> test/unittest/funcs/tst.inet_ntoa.d | 4 +-</div>
<div class="x_ContentPasted0"> test/unittest/ip/tst.lv-receive.r | 20 +++</div>
<div class="x_ContentPasted0"> test/unittest/ip/tst.lv-receive.r.p | 1 +</div>
<div class="x_ContentPasted0"> test/unittest/ip/tst.lv-receive.sh | 11 ++</div>
<div class="x_ContentPasted0"> test/unittest/ip/tst.lv-send.r | 20 +++</div>
<div class="x_ContentPasted0"> test/unittest/ip/tst.lv-send.r.p | 1 +</div>
<div class="x_ContentPasted0"> test/unittest/ip/tst.lv-send.sh | 11 ++</div>
<div class="x_ContentPasted0"> 13 files changed, 260 insertions(+), 9 deletions(-)</div>
<div class="x_ContentPasted0"> create mode 100644 libdtrace/dt_prov_ip.c</div>
<div class="x_ContentPasted0"> create mode 100644 test/unittest/ip/tst.lv-receive.r</div>
<div class="x_ContentPasted0"> create mode 120000 test/unittest/ip/tst.lv-receive.r.p</div>
<div class="x_ContentPasted0"> create mode 100755 test/unittest/ip/tst.lv-receive.sh</div>
<div class="x_ContentPasted0"> create mode 100644 test/unittest/ip/tst.lv-send.r</div>
<div class="x_ContentPasted0"> create mode 120000 test/unittest/ip/tst.lv-send.r.p</div>
<div class="x_ContentPasted0"> create mode 100755 test/unittest/ip/tst.lv-send.sh</div>
<div><br class="x_ContentPasted0">
</div>
<div class="x_ContentPasted0">diff --git a/libdtrace/Build b/libdtrace/Build</div>
<div class="x_ContentPasted0">index d1b00933..7dc2d5d6 100644</div>
<div class="x_ContentPasted0">--- a/libdtrace/Build</div>
<div class="x_ContentPasted0">+++ b/libdtrace/Build</div>
<div class="x_ContentPasted0">@@ -49,6 +49,7 @@ libdtrace-build_SOURCES = dt_aggregate.c \</div>
<div class="x_ContentPasted0"> dt_prov_cpc.c \</div>
<div class="x_ContentPasted0"> dt_prov_dtrace.c \</div>
<div class="x_ContentPasted0"> dt_prov_fbt.c \</div>
<div class="x_ContentPasted0">+ dt_prov_ip.c \</div>
<div class="x_ContentPasted0"> dt_prov_lockstat.c \</div>
<div class="x_ContentPasted0"> dt_prov_proc.c \</div>
<div class="x_ContentPasted0"> dt_prov_profile.c \</div>
<div class="x_ContentPasted0">@@ -96,8 +97,9 @@ dt_proc.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0"> dt_prov_cpc.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0"> dt_prov_dtrace.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0"> dt_prov_fbt.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0">-dt_prov_proc.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0">+dt_prov_ip.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0"> dt_prov_lockstat.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0">+dt_prov_proc.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0"> dt_prov_profile.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0"> dt_prov_rawtp.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0"> dt_prov_sched.c_CFLAGS := -Wno-pedantic</div>
<div class="x_ContentPasted0">diff --git a/libdtrace/dt_open.c b/libdtrace/dt_open.c</div>
<div class="x_ContentPasted0">index 1eca6079..7050b625 100644</div>
<div class="x_ContentPasted0">--- a/libdtrace/dt_open.c</div>
<div class="x_ContentPasted0">+++ b/libdtrace/dt_open.c</div>
<div class="x_ContentPasted0">@@ -68,6 +68,7 @@ static const dt_provimpl_t *dt_providers[] = {</div>
<div class="x_ContentPasted0"> &dt_dtrace, /* list dt_dtrace first */</div>
<div class="x_ContentPasted0"> &dt_cpc,</div>
<div class="x_ContentPasted0"> &dt_fbt,</div>
<div class="x_ContentPasted0">+ &dt_ip,</div>
<div class="x_ContentPasted0"> &dt_lockstat,</div>
<div class="x_ContentPasted0"> &dt_proc,</div>
<div class="x_ContentPasted0"> &dt_profile,</div>
<div class="x_ContentPasted0">@@ -199,7 +200,7 @@ static const dt_ident_t _dtrace_globals[] = {</div>
<div class="x_ContentPasted0"> { "index", DT_IDENT_FUNC, 0, DIF_SUBR_INDEX, DT_ATTR_STABCMN, DT_VERS_1_1,</div>
<div class="x_ContentPasted0"> &dt_idops_func, "int(const char *, const char *, [int])" },</div>
<div class="x_ContentPasted0"> { "inet_ntoa", DT_IDENT_FUNC, DT_IDFLG_DPTR, DIF_SUBR_INET_NTOA, DT_ATTR_STABCMN,</div>
<div class="x_ContentPasted0">- DT_VERS_1_5, &dt_idops_func, "string(void *)" }, /* FIXME should be ipaddr_t* */</div>
<div class="x_ContentPasted0">+ DT_VERS_1_5, &dt_idops_func, "string(ipaddr_t *)" },</div>
<div class="x_ContentPasted0"> { "inet_ntoa6", DT_IDENT_FUNC, DT_IDFLG_DPTR, DIF_SUBR_INET_NTOA6, DT_ATTR_STABCMN,</div>
<div class="x_ContentPasted0"> DT_VERS_1_5, &dt_idops_func, "string(struct in6_addr *)" },</div>
<div class="x_ContentPasted0"> { "inet_ntop", DT_IDENT_FUNC, DT_IDFLG_DPTR, DIF_SUBR_INET_NTOP, DT_ATTR_STABCMN,</div>
<div class="x_ContentPasted0">diff --git a/libdtrace/dt_prov_ip.c b/libdtrace/dt_prov_ip.c</div>
<div class="x_ContentPasted0">new file mode 100644</div>
<div class="x_ContentPasted0">index 00000000..03e929b6</div>
<div class="x_ContentPasted0">--- /dev/null</div>
<div class="x_ContentPasted0">+++ b/libdtrace/dt_prov_ip.c</div>
<div class="x_ContentPasted0">@@ -0,0 +1,184 @@</div>
<div class="x_ContentPasted0">+/*</div>
<div class="x_ContentPasted0">+ * Oracle Linux DTrace.</div>
<div class="x_ContentPasted0">+ * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0">+ * Licensed under the Universal Permissive License v 1.0 as shown at</div>
<div class="x_ContentPasted0">+ * <a class="x_moz-txt-link-freetext" href="http://oss.oracle.com/licenses/upl">
http://oss.oracle.com/licenses/upl</a>.</div>
<div class="x_ContentPasted0">+ *</div>
<div class="x_ContentPasted0">+ * The 'ip' SDT provider for DTrace-specific probes.</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+#include <assert.h></div>
<div class="x_ContentPasted0">+#include <errno.h></div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+#include "dt_dctx.h"</div>
<div class="x_ContentPasted0">+#include "dt_cg.h"</div>
<div class="x_ContentPasted0">+#include "dt_provider_sdt.h"</div>
<div class="x_ContentPasted0">+#include "dt_probe.h"</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+static const char prvname[] = "ip";</div>
<div class="x_ContentPasted0">+static const char modname[] = "vmlinux";</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+static probe_dep_t probes[] = {</div>
<div class="x_ContentPasted0">+ { "receive",</div>
<div class="x_ContentPasted0">+ DTRACE_PROBESPEC_NAME, "fbt::ip_local_deliver:entry" },</div>
<div class="x_ContentPasted0">+ { "receive",</div>
<div class="x_ContentPasted0">+ DTRACE_PROBESPEC_NAME, "fbt::ip6_input:entry" },</div>
<div class="x_ContentPasted0">+ { "send",</div>
<div class="x_ContentPasted0">+ DTRACE_PROBESPEC_NAME, "fbt::ip_finish_output:entry" },</div>
<div class="x_ContentPasted0">+ { "send",</div>
<div class="x_ContentPasted0">+ DTRACE_PROBESPEC_NAME, "fbt::ip6_finish_output:entry" },</div>
<div class="x_ContentPasted0">+ { NULL, }</div>
<div class="x_ContentPasted0">+};</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+static probe_arg_t probe_args[] = {</div>
<div class="x_ContentPasted0">+ { "receive", 0, { 0, 0, "struct sk_buff *", "pktinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "receive", 1, { 1, 0, "struct sock *", "csinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "receive", 2, { 2, 0, "void_ip_t *", "ipinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "receive", 3, { 3, 0, "struct net_device *", "ifinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "receive", 4, { 4, 0, "struct iphdr *", "ipv4info_t *" } },</div>
<div class="x_ContentPasted0">+ { "receive", 5, { 5, 0, "struct ipv6hdr *", "ipv6info_t *"} },</div>
<div class="x_ContentPasted0">+ { "send", 0, { 0, 0, "struct sk_buff *", "pktinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "send", 1, { 1, 0, "struct sock *", "csinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "send", 2, { 2, 0, "void_ip_t *", "ipinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "send", 3, { 3, 0, "struct net_device *", "ifinfo_t *" } },</div>
<div class="x_ContentPasted0">+ { "send", 4, { 4, 0, "struct iphdr *", "ipv4info_t *" } },</div>
<div class="x_ContentPasted0">+ { "send", 5, { 5, 0, "struct ipv6hdr *", "ipv6info_t *"} },</div>
<div class="x_ContentPasted0">+ { NULL, }</div>
<div class="x_ContentPasted0">+};</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+static const dtrace_pattr_t pattr = {</div>
<div class="x_ContentPasted0">+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },</div>
<div class="x_ContentPasted0">+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },</div>
<div class="x_ContentPasted0">+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },</div>
<div class="x_ContentPasted0">+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },</div>
<div class="x_ContentPasted0">+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },</div>
<div class="x_ContentPasted0">+};</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+/*</div>
<div class="x_ContentPasted0">+ * Provide all the "ip" SDT probes.</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+static int populate(dtrace_hdl_t *dtp)</div>
<div class="x_ContentPasted0">+{</div>
<div class="x_ContentPasted0">+ return dt_sdt_populate(dtp, prvname, modname, &dt_ip, &pattr,</div>
<div class="x_ContentPasted0">+ probe_args, probes);</div>
<div class="x_ContentPasted0">+}</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+/*</div>
<div class="x_ContentPasted0">+ * Retrieve the value of a member in a given struct.</div>
<div class="x_ContentPasted0">+ *</div>
<div class="x_ContentPasted0">+ * Entry:</div>
<div class="x_ContentPasted0">+ * reg = TYPE *ptr</div>
<div class="x_ContentPasted0">+ *</div>
<div class="x_ContentPasted0">+ * Return:</div>
<div class="x_ContentPasted0">+ * %r0 = ptr->member</div>
<div class="x_ContentPasted0">+ * Clobbers:</div>
<div class="x_ContentPasted0">+ * %r1 .. %r5</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+static int get_member(dt_pcb_t *pcb, const char *name, int reg,</div>
<div class="x_ContentPasted0">+ const char *member) {</div>
<div class="x_ContentPasted0">+ dtrace_hdl_t *dtp = pcb->pcb_hdl;</div>
<div class="x_ContentPasted0">+ dt_irlist_t *dlp = &pcb->pcb_ir;</div>
<div class="x_ContentPasted0">+ dtrace_typeinfo_t tt;</div>
<div class="x_ContentPasted0">+ ctf_membinfo_t ctm;</div>
<div class="x_ContentPasted0">+ size_t size;</div>
<div class="x_ContentPasted0">+ uint_t ldop;</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ if (dtrace_lookup_by_type(dtp, DTRACE_OBJ_KMODS, name, &tt) == -1 ||</div>
<div class="x_ContentPasted0">+ ctf_member_info(tt.dtt_ctfp, tt.dtt_type, member, &ctm) == CTF_ERR)</div>
<div class="x_ContentPasted0">+ return -1;</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ ldop = dt_cg_ldsize(NULL, tt.dtt_ctfp, ctm.ctm_type, &size);</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_MOV_REG(BPF_REG_3, reg));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, ctm.ctm_offset / NBBY));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_MOV_IMM(BPF_REG_2, size));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_MOV_REG(BPF_REG_1, BPF_REG_FP));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, DT_TRAMP_SP_BASE));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_CALL_HELPER(dtp->dt_bpfhelper[BPF_FUNC_probe_read_kernel]));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_LOAD(ldop, BPF_REG_0, BPF_REG_FP, DT_TRAMP_SP_BASE));</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ return 0;</div>
<div class="x_ContentPasted0">+}</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+/*</div>
<div class="x_ContentPasted0">+ * Generate a BPF trampoline for a SDT probe.</div>
<div class="x_ContentPasted0">+ *</div>
<div class="x_ContentPasted0">+ * The trampoline function is called when a SDT probe triggers, and it must</div>
<div class="x_ContentPasted0">+ * satisfy the following prototype:</div>
<div class="x_ContentPasted0">+ *</div>
<div class="x_ContentPasted0">+ * int dt_ip(void *data)</div>
<div class="x_ContentPasted0">+ *</div>
<div class="x_ContentPasted0">+ * The trampoline will populate a dt_dctx_t struct and then call the function</div>
<div class="x_ContentPasted0">+ * that implements the compiled D clause. It returns the value that it gets</div>
<div class="x_ContentPasted0">+ * back from that function.</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+static int trampoline(dt_pcb_t *pcb, uint_t exitlbl)</div>
<div class="x_ContentPasted0">+{</div>
<div class="x_ContentPasted0">+ dt_irlist_t *dlp = &pcb->pcb_ir;</div>
<div class="x_ContentPasted0">+ dt_probe_t *prp = pcb->pcb_probe;</div>
<div class="x_ContentPasted0">+ dt_probe_t *uprp = pcb->pcb_parent_probe;</div>
<div class="x_ContentPasted0">+ uint_t skbreg;</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ /*</div>
<div class="x_ContentPasted0">+ * Determine the register that holds a pointer to the skb passed from</div>
<div class="x_ContentPasted0">+ * the underlying probe.</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+ if (strcmp(prp->desc->prb, "receive") == 0)</div>
<div class="x_ContentPasted0">+ skbreg = 0;</div>
<div class="x_ContentPasted0">+ else</div>
<div class="x_ContentPasted0">+ skbreg = 2;</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ /*</div>
<div class="x_ContentPasted0">+ * We construct the ip:::(receive,send) probe arguments as</div>
<div class="x_ContentPasted0">+ * follows:</div>
<div class="x_ContentPasted0">+ * args[0] = skb</div>
<div class="x_ContentPasted0">+ * args[1] = skb->sk</div>
<div class="x_ContentPasted0">+ * args[2] = ip_hdr(skb)</div>
<div class="x_ContentPasted0">+ * args[3] = skb->dev</div>
<div class="x_ContentPasted0">+ * args[4] = [IPv4] ip_hdr(skb) -or- [IPv6] NULL</div>
<div class="x_ContentPasted0">+ * args[5] = [IPv4] NULL -or- [IPv6] ipv6_hdr(skb)</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_LOAD(BPF_DW, BPF_REG_6, BPF_REG_7, DMST_ARG(skbreg)));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_BRANCH_IMM(BPF_JEQ, BPF_REG_6, 0, exitlbl));</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE(BPF_DW, BPF_REG_7, DMST_ARG(0), BPF_REG_6));</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ get_member(pcb, "struct sk_buff", BPF_REG_6, "sk");</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE(BPF_DW, BPF_REG_7, DMST_ARG(1), BPF_REG_0));</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ /*</div>
<div class="x_ContentPasted0">+ * ip_hdr(skb) =</div>
<div class="x_ContentPasted0">+ * skb_network_header(skb) = (include/linux/ip.h)</div>
<div class="x_ContentPasted0">+ * skb->head + skb->network_header (include/linux/skbuff.h)</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+ get_member(pcb, "struct sk_buff", BPF_REG_6, "head");</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE(BPF_DW, BPF_REG_7, DMST_ARG(2), BPF_REG_0));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE(BPF_DW, BPF_REG_7, DMST_ARG(4), BPF_REG_0));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE(BPF_DW, BPF_REG_7, DMST_ARG(5), BPF_REG_0));</div>
<div class="x_ContentPasted0">+ get_member(pcb, "struct sk_buff", BPF_REG_6, "network_header");</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_XADD_REG(BPF_DW, BPF_REG_7, DMST_ARG(2), BPF_REG_0));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_XADD_REG(BPF_DW, BPF_REG_7, DMST_ARG(4), BPF_REG_0));</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_XADD_REG(BPF_DW, BPF_REG_7, DMST_ARG(5), BPF_REG_0));</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ /*</div>
<div class="x_ContentPasted0">+ * We can use the name of the underlying probe to determine whether we</div>
<div class="x_ContentPasted0">+ * are dealing with IPv4 (ip_*) or IPv6 (ip6_*).</div>
<div class="x_ContentPasted0">+ */</div>
<div class="x_ContentPasted0">+ if (uprp->desc->fun[2] == '6')</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE_IMM(BPF_DW, BPF_REG_7, DMST_ARG(4), 0));</div>
<div class="x_ContentPasted0">+ else</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE_IMM(BPF_DW, BPF_REG_7, DMST_ARG(5), 0));</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ get_member(pcb, "struct sk_buff", BPF_REG_6, "dev");</div>
<div class="x_ContentPasted0">+ emit(dlp, BPF_STORE(BPF_DW, BPF_REG_7, DMST_ARG(3), BPF_REG_0));</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ return 0;</div>
<div class="x_ContentPasted0">+}</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+dt_provimpl_t dt_ip = {</div>
<div class="x_ContentPasted0">+ .name = prvname,</div>
<div class="x_ContentPasted0">+ .prog_type = BPF_PROG_TYPE_UNSPEC,</div>
<div class="x_ContentPasted0">+ .populate = &populate,</div>
<div class="x_ContentPasted0">+ .enable = &dt_sdt_enable,</div>
<div class="x_ContentPasted0">+ .trampoline = &trampoline,</div>
<div class="x_ContentPasted0">+ .probe_info = &dt_sdt_probe_info,</div>
<div class="x_ContentPasted0">+};</div>
<div class="x_ContentPasted0">diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h</div>
<div class="x_ContentPasted0">index 8face769..31ad028d 100644</div>
<div class="x_ContentPasted0">--- a/libdtrace/dt_provider.h</div>
<div class="x_ContentPasted0">+++ b/libdtrace/dt_provider.h</div>
<div class="x_ContentPasted0">@@ -70,6 +70,7 @@ typedef struct dt_provimpl {</div>
<div class="x_ContentPasted0"> extern dt_provimpl_t dt_dtrace;</div>
<div class="x_ContentPasted0"> extern dt_provimpl_t dt_cpc;</div>
<div class="x_ContentPasted0"> extern dt_provimpl_t dt_fbt;</div>
<div class="x_ContentPasted0">+extern dt_provimpl_t dt_ip;</div>
<div class="x_ContentPasted0"> extern dt_provimpl_t dt_lockstat;</div>
<div class="x_ContentPasted0"> extern dt_provimpl_t dt_proc;</div>
<div class="x_ContentPasted0"> extern dt_provimpl_t dt_profile;</div>
<div class="x_ContentPasted0">diff --git a/libdtrace/ip.d b/libdtrace/ip.d</div>
<div class="x_ContentPasted0">index f66316c3..f8b77f12 100644</div>
<div class="x_ContentPasted0">--- a/libdtrace/ip.d</div>
<div class="x_ContentPasted0">+++ b/libdtrace/ip.d</div>
<div class="x_ContentPasted0">@@ -1,6 +1,6 @@</div>
<div class="x_ContentPasted0"> /*</div>
<div class="x_ContentPasted0"> * Oracle Linux DTrace.</div>
<div class="x_ContentPasted0">- * Copyright (c) 2007, 2020, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0">+ * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0"> * Licensed under the Universal Permissive License v 1.0 as shown at</div>
<div class="x_ContentPasted0"> * <a class="x_moz-txt-link-freetext" href="http://oss.oracle.com/licenses/upl">
http://oss.oracle.com/licenses/upl</a>.</div>
<div class="x_ContentPasted0"> */</div>
<div class="x_ContentPasted0">@@ -51,6 +51,8 @@ inline int TCP_MIN_HEADER_LENGTH = 20;</div>
<div class="x_ContentPasted0"> * to the net namespace (nd_net in struct net_device).</div>
<div class="x_ContentPasted0"> */</div>
<div class="x_ContentPasted0"> typedef uint64_t netstackid_t;</div>
<div class="x_ContentPasted0">+typedef __be32 ipaddr_t;</div>
<div class="x_ContentPasted0">+typedef struct in6_addr in6_addr_t;</div>
<div class="x_ContentPasted0"> </div>
<div class="x_ContentPasted0"> /*</div>
<div class="x_ContentPasted0"> * pktinfo is where packet ID info can be made available for deeper</div>
<div class="x_ContentPasted0">@@ -159,7 +161,7 @@ translator csinfo_t < struct sock *s > {</div>
<div class="x_ContentPasted0"> #pragma D binding "1.5" translator</div>
<div class="x_ContentPasted0"> translator ipinfo_t < struct iphdr *I > {</div>
<div class="x_ContentPasted0"> ip_ver = 4;</div>
<div class="x_ContentPasted0">- ip_plength = I != NULL ? (ntohs(I->tot_len) - (*(uint8_t *)I & 0xf) << 2) : 0;</div>
<div class="x_ContentPasted0">+ ip_plength = I != NULL ? (ntohs(I->tot_len) - I->ihl << 2) : 0;</div>
<div class="x_ContentPasted0"> ip_saddr = I != NULL ? inet_ntoa(&I->saddr) : "<unknown>";</div>
<div class="x_ContentPasted0"> ip_daddr = I != NULL ? inet_ntoa(&I->daddr) : "<unknown>";</div>
<div class="x_ContentPasted0"> };</div>
<div class="x_ContentPasted0">diff --git a/test/demo/ip/ipproto.d b/test/demo/ip/ipproto.d</div>
<div class="x_ContentPasted0">index 0538abe3..da499f74 100644</div>
<div class="x_ContentPasted0">--- a/test/demo/ip/ipproto.d</div>
<div class="x_ContentPasted0">+++ b/test/demo/ip/ipproto.d</div>
<div class="x_ContentPasted0">@@ -1,10 +1,9 @@</div>
<div class="x_ContentPasted0"> /*</div>
<div class="x_ContentPasted0"> * Oracle Linux DTrace.</div>
<div class="x_ContentPasted0">- * Copyright (c) 2008, 2020, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0">+ * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0"> * Licensed under the Universal Permissive License v 1.0 as shown at</div>
<div class="x_ContentPasted0"> * <a class="x_moz-txt-link-freetext" href="http://oss.oracle.com/licenses/upl">
http://oss.oracle.com/licenses/upl</a>.</div>
<div class="x_ContentPasted0"> */</div>
<div class="x_ContentPasted0">-/* @@xfail: dtv2 */</div>
<div class="x_ContentPasted0"> </div>
<div class="x_ContentPasted0"> #pragma D option quiet</div>
<div class="x_ContentPasted0"> </div>
<div class="x_ContentPasted0">diff --git a/test/unittest/funcs/tst.inet_ntoa.d b/test/unittest/funcs/tst.inet_ntoa.d</div>
<div class="x_ContentPasted0">index 42ea7107..3b7b7556 100644</div>
<div class="x_ContentPasted0">--- a/test/unittest/funcs/tst.inet_ntoa.d</div>
<div class="x_ContentPasted0">+++ b/test/unittest/funcs/tst.inet_ntoa.d</div>
<div class="x_ContentPasted0">@@ -1,14 +1,12 @@</div>
<div class="x_ContentPasted0"> /*</div>
<div class="x_ContentPasted0"> * Oracle Linux DTrace.</div>
<div class="x_ContentPasted0">- * Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0">+ * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0"> * Licensed under the Universal Permissive License v 1.0 as shown at</div>
<div class="x_ContentPasted0"> * <a class="x_moz-txt-link-freetext" href="http://oss.oracle.com/licenses/upl">
http://oss.oracle.com/licenses/upl</a>.</div>
<div class="x_ContentPasted0"> */</div>
<div class="x_ContentPasted0"> </div>
<div class="x_ContentPasted0"> #pragma D option quiet</div>
<div class="x_ContentPasted0"> </div>
<div class="x_ContentPasted0">-typedef vmlinux`__be32 ipaddr_t; /* FIXME: how should this really be handled? */</div>
<div class="x_ContentPasted0">-</div>
<div class="x_ContentPasted0"> ipaddr_t *ip4a;</div>
<div class="x_ContentPasted0"> ipaddr_t *ip4b;</div>
<div class="x_ContentPasted0"> ipaddr_t *ip4c;</div>
<div class="x_ContentPasted0">diff --git a/test/unittest/ip/tst.lv-receive.r b/test/unittest/ip/tst.lv-receive.r</div>
<div class="x_ContentPasted0">new file mode 100644</div>
<div class="x_ContentPasted0">index 00000000..bf81d0e1</div>
<div class="x_ContentPasted0">--- /dev/null</div>
<div class="x_ContentPasted0">+++ b/test/unittest/ip/tst.lv-receive.r</div>
<div class="x_ContentPasted0">@@ -0,0 +1,20 @@</div>
<div class="x_ContentPasted0">+PROBE ip vmlinux receive</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ Probe Description Attributes</div>
<div class="x_ContentPasted0">+ Identifier Names: Private</div>
<div class="x_ContentPasted0">+ Data Semantics: Private</div>
<div class="x_ContentPasted0">+ Dependency Class: Unknown</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ Argument Attributes</div>
<div class="x_ContentPasted0">+ Identifier Names: Evolving</div>
<div class="x_ContentPasted0">+ Data Semantics: Evolving</div>
<div class="x_ContentPasted0">+ Dependency Class: ISA</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ Argument Types</div>
<div class="x_ContentPasted0">+ args[0]: pktinfo_t *</div>
<div class="x_ContentPasted0">+ args[1]: csinfo_t *</div>
<div class="x_ContentPasted0">+ args[2]: ipinfo_t *</div>
<div class="x_ContentPasted0">+ args[3]: ifinfo_t *</div>
<div class="x_ContentPasted0">+ args[4]: ipv4info_t *</div>
<div class="x_ContentPasted0">+ args[5]: ipv6info_t *</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">diff --git a/test/unittest/ip/tst.lv-receive.r.p b/test/unittest/ip/tst.lv-receive.r.p</div>
<div class="x_ContentPasted0">new file mode 120000</div>
<div class="x_ContentPasted0">index 00000000..d9c51ca5</div>
<div class="x_ContentPasted0">--- /dev/null</div>
<div class="x_ContentPasted0">+++ b/test/unittest/ip/tst.lv-receive.r.p</div>
<div class="x_ContentPasted0">@@ -0,0 +1 @@</div>
<div class="x_ContentPasted0">+../lockstat/tst.lv-adaptive-acquire-error.r.p</div>
<div class="x_ContentPasted0">\ No newline at end of file</div>
<div class="x_ContentPasted0">diff --git a/test/unittest/ip/tst.lv-receive.sh b/test/unittest/ip/tst.lv-receive.sh</div>
<div class="x_ContentPasted0">new file mode 100755</div>
<div class="x_ContentPasted0">index 00000000..0bb06caf</div>
<div class="x_ContentPasted0">--- /dev/null</div>
<div class="x_ContentPasted0">+++ b/test/unittest/ip/tst.lv-receive.sh</div>
<div class="x_ContentPasted0">@@ -0,0 +1,11 @@</div>
<div class="x_ContentPasted0">+#!/bin/bash</div>
<div class="x_ContentPasted0">+#</div>
<div class="x_ContentPasted0">+# Oracle Linux DTrace.</div>
<div class="x_ContentPasted0">+# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0">+# Licensed under the Universal Permissive License v 1.0 as shown at</div>
<div class="x_ContentPasted0">+# <a class="x_moz-txt-link-freetext" href="http://oss.oracle.com/licenses/upl">
http://oss.oracle.com/licenses/upl</a>.</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+dtrace=$1</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+$dtrace $dt_flags -lvn ip:::receive</div>
<div class="x_ContentPasted0">+exit $?</div>
<div class="x_ContentPasted0">diff --git a/test/unittest/ip/tst.lv-send.r b/test/unittest/ip/tst.lv-send.r</div>
<div class="x_ContentPasted0">new file mode 100644</div>
<div class="x_ContentPasted0">index 00000000..66b5efd3</div>
<div class="x_ContentPasted0">--- /dev/null</div>
<div class="x_ContentPasted0">+++ b/test/unittest/ip/tst.lv-send.r</div>
<div class="x_ContentPasted0">@@ -0,0 +1,20 @@</div>
<div class="x_ContentPasted0">+PROBE ip vmlinux send</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ Probe Description Attributes</div>
<div class="x_ContentPasted0">+ Identifier Names: Private</div>
<div class="x_ContentPasted0">+ Data Semantics: Private</div>
<div class="x_ContentPasted0">+ Dependency Class: Unknown</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ Argument Attributes</div>
<div class="x_ContentPasted0">+ Identifier Names: Evolving</div>
<div class="x_ContentPasted0">+ Data Semantics: Evolving</div>
<div class="x_ContentPasted0">+ Dependency Class: ISA</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+ Argument Types</div>
<div class="x_ContentPasted0">+ args[0]: pktinfo_t *</div>
<div class="x_ContentPasted0">+ args[1]: csinfo_t *</div>
<div class="x_ContentPasted0">+ args[2]: ipinfo_t *</div>
<div class="x_ContentPasted0">+ args[3]: ifinfo_t *</div>
<div class="x_ContentPasted0">+ args[4]: ipv4info_t *</div>
<div class="x_ContentPasted0">+ args[5]: ipv6info_t *</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">diff --git a/test/unittest/ip/tst.lv-send.r.p b/test/unittest/ip/tst.lv-send.r.p</div>
<div class="x_ContentPasted0">new file mode 120000</div>
<div class="x_ContentPasted0">index 00000000..d9c51ca5</div>
<div class="x_ContentPasted0">--- /dev/null</div>
<div class="x_ContentPasted0">+++ b/test/unittest/ip/tst.lv-send.r.p</div>
<div class="x_ContentPasted0">@@ -0,0 +1 @@</div>
<div class="x_ContentPasted0">+../lockstat/tst.lv-adaptive-acquire-error.r.p</div>
<div class="x_ContentPasted0">\ No newline at end of file</div>
<div class="x_ContentPasted0">diff --git a/test/unittest/ip/tst.lv-send.sh b/test/unittest/ip/tst.lv-send.sh</div>
<div class="x_ContentPasted0">new file mode 100755</div>
<div class="x_ContentPasted0">index 00000000..46dba5cf</div>
<div class="x_ContentPasted0">--- /dev/null</div>
<div class="x_ContentPasted0">+++ b/test/unittest/ip/tst.lv-send.sh</div>
<div class="x_ContentPasted0">@@ -0,0 +1,11 @@</div>
<div class="x_ContentPasted0">+#!/bin/bash</div>
<div class="x_ContentPasted0">+#</div>
<div class="x_ContentPasted0">+# Oracle Linux DTrace.</div>
<div class="x_ContentPasted0">+# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.</div>
<div class="x_ContentPasted0">+# Licensed under the Universal Permissive License v 1.0 as shown at</div>
<div class="x_ContentPasted0">+# <a class="x_moz-txt-link-freetext" href="http://oss.oracle.com/licenses/upl">
http://oss.oracle.com/licenses/upl</a>.</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+dtrace=$1</div>
<div class="x_ContentPasted0">+</div>
<div class="x_ContentPasted0">+$dtrace $dt_flags -lvn ip:::send</div>
<div class="x_ContentPasted0">+exit $?</div>
<div class="x_ContentPasted0">-- </div>
<div class="x_ContentPasted0">2.40.1</div>
<div><br class="x_ContentPasted0">
</div>
<br>
</div>
</blockquote>
</div>
</body>
</html>