diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2017-11-24 04:38:29 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-11-24 04:38:29 +0000 |
commit | 2d868b48b2f313deb4853e8ac5047d05132969c5 (patch) | |
tree | 4a56d9683737ec68d8f0e5615abfea118eec6426 /testsuite/tools/generate_nlmsg.c | |
parent | 1934149f47ee4dfe2b22258c2e18f55a510b5889 (diff) | |
parent | ff27a837e601b1f0331b4700c167107b38475e31 (diff) | |
download | platform_external_iproute2-caa90c0a67c4c0f1a2b132bb4c4fecf21f87c901.tar.gz platform_external_iproute2-caa90c0a67c4c0f1a2b132bb4c4fecf21f87c901.tar.bz2 platform_external_iproute2-caa90c0a67c4c0f1a2b132bb4c4fecf21f87c901.zip |
Merge changes Id0db30f6,I117dcabd,If21f95e2,I42c1ebfa am: 550751fdb7 am: ef18ea8cd8android-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r3android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-p-preview-3android-p-preview-2android-9.0.0_r47android-9.0.0_r46android-9.0.0_r45android-9.0.0_r44android-9.0.0_r43android-9.0.0_r42android-9.0.0_r41android-9.0.0_r40android-9.0.0_r39android-9.0.0_r38android-9.0.0_r37android-9.0.0_r36android-9.0.0_r35android-9.0.0_r34android-9.0.0_r33android-9.0.0_r32android-9.0.0_r31android-9.0.0_r30android-9.0.0_r22android-9.0.0_r21android-9.0.0_r20android-9.0.0_r19android-9.0.0_r16android-9.0.0_r12android-9.0.0_r11pie-qpr3-s1-releasepie-qpr3-releasepie-qpr3-b-releasepie-qpr2-releasepie-qpr1-s3-releasepie-qpr1-s2-releasepie-qpr1-s1-releasepie-qpr1-releasepie-dr1-releasepie-dr1-devpie-devpie-b4s4-releasepie-b4s4-dev
am: ff27a837e6
Change-Id: I9bbf3abcb11c1f81c33de67dbe8ea88898fe8fa5
Diffstat (limited to 'testsuite/tools/generate_nlmsg.c')
-rw-r--r-- | testsuite/tools/generate_nlmsg.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/testsuite/tools/generate_nlmsg.c b/testsuite/tools/generate_nlmsg.c new file mode 100644 index 00000000..fe96f262 --- /dev/null +++ b/testsuite/tools/generate_nlmsg.c @@ -0,0 +1,116 @@ +/* + * generate_nlmsg.c Testsuite helper generating nlmsg blob + * + * 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. + * + * Authors: Phil Sutter <phil@nwl.cc> + */ + +#include <netinet/ether.h> +#include <libnetlink.h> +#include <sys/socket.h> +#include <linux/if.h> +#include <errno.h> +#include <stdio.h> + +int fill_vf_rate_test(void *buf, size_t buflen) +{ + char bcmac[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + struct ifla_vf_mac vf_mac = { + .mac = { 0x0, 0x26, 0x6c, 0xff, 0xb5, 0xc0 }, + }; + struct ifla_vf_link_state vf_link_state = { 0 }; + struct ifla_vf_tx_rate vf_tx_rate = { 0 }; + struct ifla_vf_spoofchk vf_spoofchk = { + .setting = 1, + }; + struct ifla_vf_vlan vf_vlan = { 0 }; + struct rtattr *vfinfo_list, *vfinfo; + struct nlmsghdr *h = buf; + struct ifinfomsg *ifi; + + h->nlmsg_type = RTM_NEWLINK; + h->nlmsg_len = NLMSG_LENGTH(sizeof(*ifi)); + + ifi = NLMSG_DATA(h); + ifi->ifi_type = ARPHRD_ETHER; + ifi->ifi_index = 1; + ifi->ifi_flags = IFF_RUNNING | IFF_BROADCAST | + IFF_MULTICAST | IFF_UP | IFF_LOWER_UP; + +#define ASSERT(x) if (x < 0) return -1 +#define ATTR_L(t, v, l) ASSERT(addattr_l(h, buflen, t, v, l)) +#define ATTR_8(t, v) ASSERT(addattr8(h, buflen, t, v)) +#define ATTR_32(t, v) ASSERT(addattr32(h, buflen, t, v)) +#define ATTR_STRZ(t, v) ASSERT(addattrstrz(h, buflen, t, v)) + +#define NEST(t) addattr_nest(h, buflen, t) +#define NEST_END(t) addattr_nest_end(h, t) + + ATTR_STRZ(IFLA_IFNAME, "eth0"); + ATTR_32(IFLA_TXQLEN, 10000); + ATTR_8(IFLA_OPERSTATE, 6); + ATTR_8(IFLA_LINKMODE, 0); + ATTR_32(IFLA_MTU, 9000); + ATTR_32(IFLA_GROUP, 0); + ATTR_32(IFLA_PROMISCUITY, 0); + ATTR_32(IFLA_NUM_TX_QUEUES, 8); + ATTR_32(IFLA_NUM_RX_QUEUES, 8); + ATTR_8(IFLA_CARRIER, 1); + ATTR_STRZ(IFLA_QDISC, "mq"); + ATTR_L(IFLA_ADDRESS, vf_mac.mac, ETH_ALEN); + ATTR_L(IFLA_BROADCAST, bcmac, sizeof(bcmac)); + ATTR_32(IFLA_NUM_VF, 2); + + vfinfo_list = NEST(IFLA_VFINFO_LIST); + + vfinfo = NEST(IFLA_VF_INFO); + ATTR_L(IFLA_VF_MAC, &vf_mac, sizeof(vf_mac)); + ATTR_L(IFLA_VF_VLAN, &vf_vlan, sizeof(vf_vlan)); + ATTR_L(IFLA_VF_TX_RATE, &vf_tx_rate, sizeof(vf_tx_rate)); + ATTR_L(IFLA_VF_SPOOFCHK, &vf_spoofchk, sizeof(vf_spoofchk)); + ATTR_L(IFLA_VF_LINK_STATE, &vf_link_state, sizeof(vf_link_state)); + NEST_END(vfinfo); + + vf_mac.vf = vf_vlan.vf = vf_tx_rate.vf = 1; + vf_spoofchk.vf = vf_link_state.vf = 1; + + vfinfo = NEST(IFLA_VF_INFO); + ATTR_L(IFLA_VF_MAC, &vf_mac, sizeof(vf_mac)); + ATTR_L(IFLA_VF_VLAN, &vf_vlan, sizeof(vf_vlan)); + ATTR_L(IFLA_VF_TX_RATE, &vf_tx_rate, sizeof(vf_tx_rate)); + ATTR_L(IFLA_VF_SPOOFCHK, &vf_spoofchk, sizeof(vf_spoofchk)); + ATTR_L(IFLA_VF_LINK_STATE, &vf_link_state, sizeof(vf_link_state)); + NEST_END(vfinfo); + + NEST_END(vfinfo_list); + + return h->nlmsg_len; +} + +int main(void) +{ + char buf[16384] = { 0 }; + int msglen; + FILE *fp; + + msglen = fill_vf_rate_test(buf, sizeof(buf)); + if (msglen < 0) { + fprintf(stderr, "fill_vf_rate_test() failed!\n"); + return 1; + } + fp = fopen("tests/ip/link/dev_wo_vf_rate.nl", "w"); + if (!fp) { + perror("fopen()"); + return 1; + } + if (fwrite(buf, msglen, 1, fp) != 1) { + perror("fwrite()"); + return 1; + } + fclose(fp); + return 0; +} |