@@ -7,8 +7,8 @@ This module provides an interface to Berkeley socket IPC.
77Limitations:
88
99- Only AF_INET, AF_INET6 and AF_UNIX address families are supported in a
10- portable manner, though AF_PACKET, AF_NETLINK and AF_TIPC are supported
11- under Linux.
10+ portable manner, though AF_PACKET, AF_NETLINK, AF_QIPCRTR and AF_TIPC are
11+ supported under Linux.
1212- No read/write operations (use sendall/recv or makefile instead).
1313- Additional restrictions apply on some non-Unix platforms (compensated
1414 for by socket.py).
@@ -55,6 +55,8 @@ Module interface:
5555 the Ethernet protocol number to be received. For example:
5656 ("eth0",0x1234). Optional 3rd,4th,5th elements in the tuple
5757 specify packet-type and ha-type/addr.
58+ - an AF_QIPCRTR socket address is a (node, port) tuple where the
59+ node and port are non-negative integers.
5860- an AF_TIPC socket address is expressed as
5961 (addr_type, v1, v2, v3 [, scope]); where addr_type can be one of:
6062 TIPC_ADDR_NAMESEQ, TIPC_ADDR_NAME, and TIPC_ADDR_ID;
@@ -1293,6 +1295,14 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
12931295 }
12941296#endif /* AF_NETLINK */
12951297
1298+ #if defined(AF_QIPCRTR )
1299+ case AF_QIPCRTR :
1300+ {
1301+ struct sockaddr_qrtr * a = (struct sockaddr_qrtr * ) addr ;
1302+ return Py_BuildValue ("II" , a -> sq_node , a -> sq_port );
1303+ }
1304+ #endif /* AF_QIPCRTR */
1305+
12961306#if defined(AF_VSOCK )
12971307 case AF_VSOCK :
12981308 {
@@ -1668,6 +1678,30 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
16681678 }
16691679#endif /* AF_NETLINK */
16701680
1681+ #if defined(AF_QIPCRTR )
1682+ case AF_QIPCRTR :
1683+ {
1684+ struct sockaddr_qrtr * addr ;
1685+ unsigned int node , port ;
1686+ addr = (struct sockaddr_qrtr * )addr_ret ;
1687+ if (!PyTuple_Check (args )) {
1688+ PyErr_Format (
1689+ PyExc_TypeError ,
1690+ "getsockaddrarg: "
1691+ "AF_QIPCRTR address must be tuple, not %.500s" ,
1692+ Py_TYPE (args )-> tp_name );
1693+ return 0 ;
1694+ }
1695+ if (!PyArg_ParseTuple (args , "II:getsockaddrarg" , & node , & port ))
1696+ return 0 ;
1697+ addr -> sq_family = AF_QIPCRTR ;
1698+ addr -> sq_node = node ;
1699+ addr -> sq_port = port ;
1700+ * len_ret = sizeof (* addr );
1701+ return 1 ;
1702+ }
1703+ #endif /* AF_QIPCRTR */
1704+
16711705#if defined(AF_VSOCK )
16721706 case AF_VSOCK :
16731707 {
@@ -2263,6 +2297,14 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
22632297 }
22642298#endif /* AF_NETLINK */
22652299
2300+ #if defined(AF_QIPCRTR )
2301+ case AF_QIPCRTR :
2302+ {
2303+ * len_ret = sizeof (struct sockaddr_qrtr );
2304+ return 1 ;
2305+ }
2306+ #endif /* AF_QIPCRTR */
2307+
22662308#if defined(AF_VSOCK )
22672309 case AF_VSOCK :
22682310 {
@@ -6983,6 +7025,11 @@ PyInit__socket(void)
69837025#endif
69847026#endif /* AF_NETLINK */
69857027
7028+ #ifdef AF_QIPCRTR
7029+ /* Qualcomm IPCROUTER */
7030+ PyModule_AddIntMacro (m , AF_QIPCRTR );
7031+ #endif
7032+
69867033#ifdef AF_VSOCK
69877034 PyModule_AddIntConstant (m , "AF_VSOCK" , AF_VSOCK );
69887035 PyModule_AddIntConstant (m , "SO_VM_SOCKETS_BUFFER_SIZE" , 0 );
0 commit comments