static struct sk_buff *tipc_show_stats(void) { struct sk_buff *buf; struct tlv_desc *rep_tlv; char *pb; int pb_len; int str_len; u32 value; if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_UNSIGNED)) return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); value = ntohl(*(u32 *)TLV_DATA(req_tlv_area)); if (value != 0) return tipc_cfg_reply_error_string("unsupported argument"); buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN)); if (buf == NULL) return NULL; rep_tlv = (struct tlv_desc *)buf->data; pb = TLV_DATA(rep_tlv); pb_len = ULTRA_STRING_MAX_LEN; str_len = tipc_snprintf(pb, pb_len, "TIPC version " TIPC_MOD_VER "\n"); str_len += 1; /* for "\0" */ skb_put(buf, TLV_SPACE(str_len)); TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); return buf; }
/** * tipc_media_addr_printf - record media address in print buffer */ void tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a) { char addr_str[MAX_ADDR_STR]; struct tipc_media *m_ptr; int ret; m_ptr = media_find_id(a->media_id); if (m_ptr && !m_ptr->addr2str(a, addr_str, sizeof(addr_str))) ret = tipc_snprintf(buf, len, "%s(%s)", m_ptr->name, addr_str); else { u32 i; ret = tipc_snprintf(buf, len, "UNKNOWN(%u)", a->media_id); for (i = 0; i < sizeof(a->value); i++) ret += tipc_snprintf(buf - ret, len + ret, "-%02x", a->value[i]); } }
int tipc_bclink_stats(char *buf, const u32 buf_size) { int ret; struct tipc_stats *s; if (!bcl) return 0; spin_lock_bh(&bc_lock); s = &bcl->stats; ret = tipc_snprintf(buf, buf_size, "Link <%s>\n" " Window:%u packets\n", bcl->name, bcl->queue_limit[0]); ret += tipc_snprintf(buf + ret, buf_size - ret, " RX packets:%u fragments:%u/%u bundles:%u/%u\n", s->recv_info, s->recv_fragments, s->recv_fragmented, s->recv_bundles, s->recv_bundled); ret += tipc_snprintf(buf + ret, buf_size - ret, " TX packets:%u fragments:%u/%u bundles:%u/%u\n", s->sent_info, s->sent_fragments, s->sent_fragmented, s->sent_bundles, s->sent_bundled); ret += tipc_snprintf(buf + ret, buf_size - ret, " RX naks:%u defs:%u dups:%u\n", s->recv_nacks, s->deferred_recv, s->duplicates); ret += tipc_snprintf(buf + ret, buf_size - ret, " TX naks:%u acks:%u dups:%u\n", s->sent_nacks, s->sent_acks, s->retransmitted); ret += tipc_snprintf(buf + ret, buf_size - ret, " Congestion link:%u Send queue max:%u avg:%u\n", s->link_congs, s->max_queue_sz, s->queue_sz_counts ? (s->accu_queue_sz / s->queue_sz_counts) : 0); spin_unlock_bh(&bc_lock); return ret; }