144d362409d5469aed47d19e7908d19bd194493aThomas Graf/* 244d362409d5469aed47d19e7908d19bd194493aThomas Graf * nl-list-sockets.c Pretty-print /proc/net/netlink 344d362409d5469aed47d19e7908d19bd194493aThomas Graf * 444d362409d5469aed47d19e7908d19bd194493aThomas Graf * This library is free software; you can redistribute it and/or 544d362409d5469aed47d19e7908d19bd194493aThomas Graf * modify it under the terms of the GNU Lesser General Public 644d362409d5469aed47d19e7908d19bd194493aThomas Graf * License as published by the Free Software Foundation version 2.1 744d362409d5469aed47d19e7908d19bd194493aThomas Graf * of the License. 844d362409d5469aed47d19e7908d19bd194493aThomas Graf * 98808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * Copyright (c) 2003-2009 Thomas Graf <tgraf@suug.ch> 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf 128808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf#include <netlink/cli/utils.h> 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf 1444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define PROC_NETLINK "/proc/net/netlink" 1544d362409d5469aed47d19e7908d19bd194493aThomas Graf 1644d362409d5469aed47d19e7908d19bd194493aThomas Grafint main(int argc, char *argv[]) 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf FILE *fd; 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf char buf[2048], p[64]; 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf fd = fopen(PROC_NETLINK, "r"); 2244d362409d5469aed47d19e7908d19bd194493aThomas Graf if (fd == NULL) { 2344d362409d5469aed47d19e7908d19bd194493aThomas Graf perror("fopen"); 2444d362409d5469aed47d19e7908d19bd194493aThomas Graf return -1; 2544d362409d5469aed47d19e7908d19bd194493aThomas Graf } 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf 2725ccbf1dab4d40ddd0fa5343c31aed0a49d76c46Thomas Graf printf("Address Family PID Groups rmem " 2825ccbf1dab4d40ddd0fa5343c31aed0a49d76c46Thomas Graf "wmem CB refcnt\n"); 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf 3044d362409d5469aed47d19e7908d19bd194493aThomas Graf while (fgets(buf, sizeof(buf), fd)) { 3144d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned long sk, cb; 3244d362409d5469aed47d19e7908d19bd194493aThomas Graf int ret, proto, pid, rmem, wmem, refcnt; 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t groups; 3444d362409d5469aed47d19e7908d19bd194493aThomas Graf 3544d362409d5469aed47d19e7908d19bd194493aThomas Graf ret = sscanf(buf, "%lx %d %d %08x %d %d %lx %d\n", 3644d362409d5469aed47d19e7908d19bd194493aThomas Graf &sk, &proto, &pid, &groups, &rmem, &wmem, 3744d362409d5469aed47d19e7908d19bd194493aThomas Graf &cb, &refcnt); 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf if (ret != 8) 3944d362409d5469aed47d19e7908d19bd194493aThomas Graf continue; 4044d362409d5469aed47d19e7908d19bd194493aThomas Graf 4125ccbf1dab4d40ddd0fa5343c31aed0a49d76c46Thomas Graf printf("0x%016lx %-16s %-6d %08x %-6d %-6d 0x%08lx %d\n", 4244d362409d5469aed47d19e7908d19bd194493aThomas Graf sk, nl_nlfamily2str(proto, p, sizeof(p)), pid, 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf groups, rmem, wmem, cb, refcnt); 4444d362409d5469aed47d19e7908d19bd194493aThomas Graf } 4544d362409d5469aed47d19e7908d19bd194493aThomas Graf 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf fclose(fd); 4744d362409d5469aed47d19e7908d19bd194493aThomas Graf 4844d362409d5469aed47d19e7908d19bd194493aThomas Graf return 0; 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf} 50