net/tipc/trace.c

Source file repositories/reference/linux-study-clean/net/tipc/trace.c

File Facts

System
Linux kernel
Corpus path
net/tipc/trace.c
Extension
.c
Size
7165 bytes
Lines
207
Domain
Networking Core
Bucket
Sockets, Protocols, Packet Path, And Network Policy
Inferred role
Networking Core: implementation source
Status
source implementation candidate

Why This File Exists

Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.

Dependency Surface

Detected Declarations

Annotated Snippet

switch (msg_type(hdr)) {
		case TIPC_NAMED_MSG:
			i += scnprintf(buf + i, sz - i, " %u",
				       msg_nametype(hdr));
			i += scnprintf(buf + i, sz - i, " %u",
				       msg_nameinst(hdr));
			break;
		case TIPC_MCAST_MSG:
			i += scnprintf(buf + i, sz - i, " %u",
				       msg_nametype(hdr));
			i += scnprintf(buf + i, sz - i, " %u",
				       msg_namelower(hdr));
			i += scnprintf(buf + i, sz - i, " %u",
				       msg_nameupper(hdr));
			break;
		default:
			break;
		}
		i += scnprintf(buf + i, sz - i, " | %u",
			       msg_src_droppable(hdr));
		i += scnprintf(buf + i, sz - i, " %u",
			       msg_dest_droppable(hdr));
		i += scnprintf(buf + i, sz - i, " %u", msg_errcode(hdr));
		i += scnprintf(buf + i, sz - i, " %u", msg_reroute_cnt(hdr));
		break;
	default:
		/* need more? */
		break;
	}

	i += scnprintf(buf + i, sz - i, "\n");
	if (!more)
		return i;

	/* kernel-related skb data section */
	i += scnprintf(buf + i, sz - i, "skb: %s",
		       (skb->dev) ? skb->dev->name : "n/a");
	i += scnprintf(buf + i, sz - i, " %u", skb->len);
	i += scnprintf(buf + i, sz - i, " %u", skb->data_len);
	i += scnprintf(buf + i, sz - i, " %u", skb->hdr_len);
	i += scnprintf(buf + i, sz - i, " %u", skb->truesize);
	i += scnprintf(buf + i, sz - i, " %u", skb_cloned(skb));
	i += scnprintf(buf + i, sz - i, " %p", skb->sk);
	i += scnprintf(buf + i, sz - i, " %u", skb_shinfo(skb)->nr_frags);
	i += scnprintf(buf + i, sz - i, " %llx",
		       ktime_to_ms(skb_get_ktime(skb)));
	i += scnprintf(buf + i, sz - i, " %llx\n",
		       ktime_to_ms(skb_hwtstamps(skb)->hwtstamp));

	/* tipc skb cb[] data section */
	i += scnprintf(buf + i, sz - i, "cb[]: %u", skbcb->bytes_read);
	i += scnprintf(buf + i, sz - i, " %u", skbcb->orig_member);
	i += scnprintf(buf + i, sz - i, " %u",
		       jiffies_to_msecs(skbcb->nxt_retr));
	i += scnprintf(buf + i, sz - i, " %u", skbcb->validated);
	i += scnprintf(buf + i, sz - i, " %u", skbcb->chain_imp);
	i += scnprintf(buf + i, sz - i, " %u\n", skbcb->ackers);

	return i;
}

/**
 * tipc_list_dump - dump TIPC skb list/queue
 * @list: list of skbs to be dumped
 * @more: dump more?
 *        - false: dump only the head & tail skbs
 *        - true: dump the first & last 5 skbs
 * @buf: returned buffer of dump data in format
 */
int tipc_list_dump(struct sk_buff_head *list, bool more, char *buf)
{
	int i = 0;
	size_t sz = (more) ? LIST_LMAX : LIST_LMIN;
	u32 count, len;
	struct sk_buff *hskb, *tskb, *skb, *tmp;

	if (!list) {
		i += scnprintf(buf, sz, "(null)\n");
		return i;
	}

	len = skb_queue_len(list);
	i += scnprintf(buf, sz, "len = %d\n", len);

	if (!len)
		return i;

	if (!more) {
		hskb = skb_peek(list);
		i += scnprintf(buf + i, sz - i, "  head ");

Annotation

Implementation Notes