mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 18:22:45 +00:00 
			
		
		
		
	ProcFS: Expose local sockets in /proc/net/local
This commit is contained in:
		
							parent
							
								
									dadf6337ef
								
							
						
					
					
						commit
						b9223e4f04
					
				
					 1 changed files with 21 additions and 2 deletions
				
			
		|  | @ -13,10 +13,10 @@ | ||||||
| #include <Kernel/FileSystem/VirtualFileSystem.h> | #include <Kernel/FileSystem/VirtualFileSystem.h> | ||||||
| #include <Kernel/KBufferBuilder.h> | #include <Kernel/KBufferBuilder.h> | ||||||
| #include <Kernel/KParams.h> | #include <Kernel/KParams.h> | ||||||
|  | #include <Kernel/Net/LocalSocket.h> | ||||||
| #include <Kernel/Net/NetworkAdapter.h> | #include <Kernel/Net/NetworkAdapter.h> | ||||||
| #include <Kernel/Net/TCPSocket.h> | #include <Kernel/Net/TCPSocket.h> | ||||||
| #include <Kernel/Net/UDPSocket.h> | #include <Kernel/Net/UDPSocket.h> | ||||||
| #include <Kernel/Net/LocalSocket.h> |  | ||||||
| #include <Kernel/PCI.h> | #include <Kernel/PCI.h> | ||||||
| #include <Kernel/VM/MemoryManager.h> | #include <Kernel/VM/MemoryManager.h> | ||||||
| #include <Kernel/kmalloc.h> | #include <Kernel/kmalloc.h> | ||||||
|  | @ -56,6 +56,7 @@ enum ProcFileType { | ||||||
|     FI_Root_net_adapters, |     FI_Root_net_adapters, | ||||||
|     FI_Root_net_tcp, |     FI_Root_net_tcp, | ||||||
|     FI_Root_net_udp, |     FI_Root_net_udp, | ||||||
|  |     FI_Root_net_local, | ||||||
| 
 | 
 | ||||||
|     FI_PID, |     FI_PID, | ||||||
| 
 | 
 | ||||||
|  | @ -328,6 +329,19 @@ Optional<KBuffer> procfs$net_udp(InodeIdentifier) | ||||||
|     return json.serialized<KBufferBuilder>(); |     return json.serialized<KBufferBuilder>(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | Optional<KBuffer> procfs$net_local(InodeIdentifier) | ||||||
|  | { | ||||||
|  |     JsonArray json; | ||||||
|  |     LocalSocket::for_each([&json](auto& socket) { | ||||||
|  |         JsonObject obj; | ||||||
|  |         obj.set("path", String(socket.socket_path())); | ||||||
|  |         obj.set("origin_pid", socket.origin_pid()); | ||||||
|  |         obj.set("acceptor_pid", socket.acceptor_pid()); | ||||||
|  |         json.append(obj); | ||||||
|  |     }); | ||||||
|  |     return json.serialized<KBufferBuilder>(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Optional<KBuffer> procfs$pid_vmo(InodeIdentifier identifier) | Optional<KBuffer> procfs$pid_vmo(InodeIdentifier identifier) | ||||||
| { | { | ||||||
|     auto handle = ProcessInspectionHandle::from_pid(to_pid(identifier)); |     auto handle = ProcessInspectionHandle::from_pid(to_pid(identifier)); | ||||||
|  | @ -563,7 +577,8 @@ Optional<KBuffer> procfs$memstat(InodeIdentifier) | ||||||
|     json.set("super_physical_available", MM.super_physical_pages()); |     json.set("super_physical_available", MM.super_physical_pages()); | ||||||
|     json.set("kmalloc_call_count", g_kmalloc_call_count); |     json.set("kmalloc_call_count", g_kmalloc_call_count); | ||||||
|     json.set("kfree_call_count", g_kfree_call_count); |     json.set("kfree_call_count", g_kfree_call_count); | ||||||
|     return json.serialized<KBufferBuilder>();; |     return json.serialized<KBufferBuilder>(); | ||||||
|  |     ; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Optional<KBuffer> procfs$all(InodeIdentifier) | Optional<KBuffer> procfs$all(InodeIdentifier) | ||||||
|  | @ -937,6 +952,7 @@ bool ProcFSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&) | ||||||
|         callback({ "adapters", 8, to_identifier(fsid(), PDI_Root_net, 0, FI_Root_net_adapters), 0 }); |         callback({ "adapters", 8, to_identifier(fsid(), PDI_Root_net, 0, FI_Root_net_adapters), 0 }); | ||||||
|         callback({ "tcp", 3, to_identifier(fsid(), PDI_Root_net, 0, FI_Root_net_tcp), 0 }); |         callback({ "tcp", 3, to_identifier(fsid(), PDI_Root_net, 0, FI_Root_net_tcp), 0 }); | ||||||
|         callback({ "udp", 3, to_identifier(fsid(), PDI_Root_net, 0, FI_Root_net_udp), 0 }); |         callback({ "udp", 3, to_identifier(fsid(), PDI_Root_net, 0, FI_Root_net_udp), 0 }); | ||||||
|  |         callback({ "local", 5, to_identifier(fsid(), PDI_Root_net, 0, FI_Root_net_local), 0 }); | ||||||
|         break; |         break; | ||||||
| 
 | 
 | ||||||
|     case FI_PID: { |     case FI_PID: { | ||||||
|  | @ -1025,6 +1041,8 @@ InodeIdentifier ProcFSInode::lookup(StringView name) | ||||||
|             return to_identifier(fsid(), PDI_Root, 0, FI_Root_net_tcp); |             return to_identifier(fsid(), PDI_Root, 0, FI_Root_net_tcp); | ||||||
|         if (name == "udp") |         if (name == "udp") | ||||||
|             return to_identifier(fsid(), PDI_Root, 0, FI_Root_net_udp); |             return to_identifier(fsid(), PDI_Root, 0, FI_Root_net_udp); | ||||||
|  |         if (name == "local") | ||||||
|  |             return to_identifier(fsid(), PDI_Root, 0, FI_Root_net_local); | ||||||
|         return {}; |         return {}; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -1137,6 +1155,7 @@ ProcFS::ProcFS() | ||||||
|     m_entries[FI_Root_net_adapters] = { "adapters", FI_Root_net_adapters, procfs$net_adapters }; |     m_entries[FI_Root_net_adapters] = { "adapters", FI_Root_net_adapters, procfs$net_adapters }; | ||||||
|     m_entries[FI_Root_net_tcp] = { "tcp", FI_Root_net_tcp, procfs$net_tcp }; |     m_entries[FI_Root_net_tcp] = { "tcp", FI_Root_net_tcp, procfs$net_tcp }; | ||||||
|     m_entries[FI_Root_net_udp] = { "udp", FI_Root_net_udp, procfs$net_udp }; |     m_entries[FI_Root_net_udp] = { "udp", FI_Root_net_udp, procfs$net_udp }; | ||||||
|  |     m_entries[FI_Root_net_local] = { "local", FI_Root_net_local, procfs$net_local }; | ||||||
| 
 | 
 | ||||||
|     m_entries[FI_PID_vm] = { "vm", FI_PID_vm, procfs$pid_vm }; |     m_entries[FI_PID_vm] = { "vm", FI_PID_vm, procfs$pid_vm }; | ||||||
|     m_entries[FI_PID_vmo] = { "vmo", FI_PID_vmo, procfs$pid_vmo }; |     m_entries[FI_PID_vmo] = { "vmo", FI_PID_vmo, procfs$pid_vmo }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sergey Bugaev
						Sergey Bugaev