mirror of
https://github.com/python/cpython.git
synced 2025-10-21 22:22:48 +00:00
[Patch #947352 from Jason Andryuk] Add support for AF_PACKET hardware addresses
This commit is contained in:
parent
e6f8a89d1a
commit
b8e1717041
1 changed files with 15 additions and 6 deletions
|
@ -50,9 +50,7 @@ Module interface:
|
||||||
specifying the ethernet interface and an integer specifying
|
specifying the ethernet interface and an integer specifying
|
||||||
the Ethernet protocol number to be received. For example:
|
the Ethernet protocol number to be received. For example:
|
||||||
("eth0",0x1234). Optional 3rd,4th,5th elements in the tuple
|
("eth0",0x1234). Optional 3rd,4th,5th elements in the tuple
|
||||||
specify packet-type and ha-type/addr -- these are ignored by
|
specify packet-type and ha-type/addr.
|
||||||
networking code, but accepted since they are returned by the
|
|
||||||
getsockname() method.
|
|
||||||
|
|
||||||
Local naming conventions:
|
Local naming conventions:
|
||||||
|
|
||||||
|
@ -1223,10 +1221,12 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
||||||
int protoNumber;
|
int protoNumber;
|
||||||
int hatype = 0;
|
int hatype = 0;
|
||||||
int pkttype = 0;
|
int pkttype = 0;
|
||||||
char *haddr;
|
char *haddr = NULL;
|
||||||
|
unsigned int halen = 0;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "si|iis", &interfaceName,
|
if (!PyArg_ParseTuple(args, "si|iis#", &interfaceName,
|
||||||
&protoNumber, &pkttype, &hatype, &haddr))
|
&protoNumber, &pkttype, &hatype,
|
||||||
|
&haddr, &halen))
|
||||||
return 0;
|
return 0;
|
||||||
strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name));
|
strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name));
|
||||||
ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0';
|
ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0';
|
||||||
|
@ -1240,6 +1240,15 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
||||||
addr->sll_ifindex = ifr.ifr_ifindex;
|
addr->sll_ifindex = ifr.ifr_ifindex;
|
||||||
addr->sll_pkttype = pkttype;
|
addr->sll_pkttype = pkttype;
|
||||||
addr->sll_hatype = hatype;
|
addr->sll_hatype = hatype;
|
||||||
|
if (halen > 8) {
|
||||||
|
PyErr_SetString(PyExc_ValueError,
|
||||||
|
"Hardware address must be 8 bytes or less");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (halen != 0) {
|
||||||
|
memcpy(&addr->sll_addr, haddr, halen);
|
||||||
|
}
|
||||||
|
addr->sll_halen = halen;
|
||||||
*addr_ret = (struct sockaddr *) addr;
|
*addr_ret = (struct sockaddr *) addr;
|
||||||
*len_ret = sizeof *addr;
|
*len_ret = sizeof *addr;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue