I created a test case on fc25 (kernel 4.8.6) like below and it works fine for me. unsigned char *data = (unsigned char *)(long)skb->data; unsigned char *data_end = (unsigned char *)(long)skb->data_end; if (data + 2 > data_end) return 0; char fmt[] = "%u\n"; bpf_trace_printk_(fmt, sizeof(fmt), *data); On Fri, Jun 30, 2017 at 2:25 PM, MD I. Islam <tamim@xxxxxxxxxxx> wrote: > I tried to cast it into int *. In that case, it should print the > integer. But I get the same problem. > > On Fri, Jun 30, 2017 at 5:16 PM, Y Song <ys114321@xxxxxxxxx> wrote: >> Maybe *data is not a printable character? >> >> On Fri, Jun 30, 2017 at 12:54 PM, MD I. Islam <tamim@xxxxxxxxxxx> wrote: >>> Hi >>> >>> I have following code attached to an interface: >>> >>> SEC("simple") >>> int handle_ingress(struct __sk_buff *skb) >>> { >>> unsigned char *data = (unsigned char *)(long)skb->data; >>> char fmt[] = "%u\n"; >>> bpf_trace_printk(fmt, sizeof(fmt), *data); >>> return 0; >>> } >>> >>> When packets pass through the interface, it does not print anything at >>> /sys/kernel/debug/tracing/trace_pipe. However if I do >>> bpf_trace_printk(fmt, sizeof(fmt), data), it prints the pointer. Could >>> you please advise what is wrong here? >>> >>> Many thanks >>> Tamim