| /* |
| * UNIX An implementation of the AF_UNIX network domain for the |
| * LINUX operating system. UNIX is implemented using the |
| * BSD Socket interface as the means of communication with |
| * the user level. |
| * |
| * The functions in this file provide an interface between |
| * the PROC file system and the "unix" family of networking |
| * protocols. It is mainly used for debugging and statistics. |
| * |
| * Version: @(#)proc.c 1.0.4 05/23/93 |
| * |
| * Authors: Ross Biro, <bir7@leland.Stanford.Edu> |
| * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
| * Gerald J. Heim, <heim@peanuts.informatik.uni-tuebingen.de> |
| * Fred Baumgarten, <dc6iq@insu1.etec.uni-kalrsruhe.de> |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation; either version |
| * 2 of the License, or (at your option) any later version. |
| */ |
| #include <linux/autoconf.h> |
| #include <linux/sched.h> |
| #include <linux/string.h> |
| #include <linux/socket.h> |
| #include <linux/net.h> |
| #include <linux/ddi.h> |
| #include <linux/un.h> |
| #include <linux/param.h> |
| #include "unix.h" |
| |
| |
| /* Called from PROCfs. */ |
| int unix_get_info(char *buffer) |
| { |
| char *pos; |
| int i; |
| |
| pos = buffer; |
| pos += sprintf(pos, "Num RefCount Protocol Flags Type St Path\n"); |
| |
| for(i = 0; i < NSOCKETS; i++) { |
| if (unix_datas[i].refcnt) { |
| pos += sprintf(pos, "%2d: %08X %08X %08X %04X %02X", i, |
| unix_datas[i].refcnt, |
| unix_datas[i].protocol, |
| unix_datas[i].socket->flags, |
| unix_datas[i].socket->type, |
| unix_datas[i].socket->state |
| ); |
| |
| /* If socket is bound to a filename, we'll print it. */ |
| if(unix_datas[i].sockaddr_len>0) { |
| pos += sprintf(pos, " %s\n", |
| unix_datas[i].sockaddr_un.sun_path); |
| } else { /* just add a newline */ |
| *pos='\n'; |
| pos++; |
| *pos='\0'; |
| } |
| |
| /* |
| * Check wether buffer _may_ overflow in the next loop. |
| * Since sockets may have very very long paths, we make |
| * PATH_MAX+100 the minimum space left for a new line. |
| */ |
| if (pos > buffer+PAGE_SIZE-80-PATH_MAX) { |
| printk("UNIX: netinfo: oops, too many sockets.\n"); |
| return(pos - buffer); |
| } |
| } |
| } |
| return(pos - buffer); |
| } |