Commit 3ef8d138 authored by Pavel Emelyanov's avatar Pavel Emelyanov

packetsk: Support PACKET_RESERVE option

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 1259a9ad
......@@ -12,4 +12,5 @@ message packet_sock_entry {
required sk_opts_entry opts = 7;
required uint32 version = 8;
required uint32 reserve = 9;
}
......@@ -56,6 +56,9 @@ static int dump_one_packet_fd(int lfd, u32 id, const struct fd_parms *p)
if (dump_opt(lfd, SOL_PACKET, PACKET_VERSION, &psk.version))
return -1;
if (dump_opt(lfd, SOL_PACKET, PACKET_RESERVE, &psk.reserve))
return -1;
return pb_write_one(fdset_fd(glob_fdset, CR_FD_PACKETSK), &psk, PB_PACKETSK);
}
......@@ -100,6 +103,9 @@ static int open_packet_sk(struct file_desc *d)
if (restore_opt(sk, SOL_PACKET, PACKET_VERSION, &pse->version))
goto err_cl;
if (restore_opt(sk, SOL_PACKET, PACKET_RESERVE, &pse->reserve))
goto err_cl;
if (rst_file_params(sk, pse->fown, pse->flags))
goto err_cl;
......
......@@ -23,6 +23,8 @@ const char *test_author = "Pavel Emelyanov <xemul@parallels.com>";
#include <linux/if_packet.h>
#include <net/ethernet.h>
#define SK_RESERVE 8
static int test_sockaddr(int n, struct sockaddr_ll *have, struct sockaddr_ll *want)
{
if (have->sll_family != want->sll_family) {
......@@ -52,7 +54,7 @@ int main(int argc, char **argv)
int sk1, sk2;
struct sockaddr_ll addr, addr1, addr2;
socklen_t alen;
int ver;
int ver, rsv;
test_init(argc, argv);
......@@ -94,6 +96,12 @@ int main(int argc, char **argv)
return 1;
}
rsv = SK_RESERVE;
if (setsockopt(sk2, SOL_PACKET, PACKET_RESERVE, &rsv, sizeof(rsv)) < 0) {
err("Can't set reserve %m");
return 1;
}
test_daemon();
test_waitsig();
......@@ -126,6 +134,17 @@ int main(int argc, char **argv)
if (test_sockaddr(2, &addr, &addr2))
return 1;
alen = sizeof(rsv);
if (getsockopt(sk2, SOL_PACKET, PACKET_RESERVE, &rsv, &alen) < 0) {
fail("Can't get sockopt rsv %m");
return 1;
}
if (rsv != SK_RESERVE) {
fail("Reserve mismatch have %d, want %d\n", rsv, SK_RESERVE);
return 1;
}
pass();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment