[PATCH v4] tests: extend for decoding of udev_monitor_netlink_header

Harsha Sharma harshasharmaiitr at gmail.com
Thu Mar 29 18:49:38 UTC 2018


On Wed, Mar 28, 2018 at 2:19 AM, Dmitry V. Levin <ldv at altlinux.org> wrote:
> On Wed, Mar 28, 2018 at 01:44:06AM +0530, Harsha Sharma wrote:
>> * tests/netlink_kobject_uevent.c: Add test_nlmsg_type_udev.
>> ---
>> Changes in v4:
>> * invoke sprintrc before first printf call
>> * minor fix
>>
>> Changes in v3:
>> * change format type
>>
>> Changes in v2:
>> * Add decoding of kernel messages
>> * initialize udev_monitor_netlink_header with non-zero values
>> * cover case for length exceeding size of structure
>>
>>  tests/netlink_kobject_uevent.c | 68 ++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 68 insertions(+)
>>
>> diff --git a/tests/netlink_kobject_uevent.c b/tests/netlink_kobject_uevent.c
>> index cacab5fd..09708e62 100644
>> --- a/tests/netlink_kobject_uevent.c
>> +++ b/tests/netlink_kobject_uevent.c
>> @@ -27,9 +27,75 @@
>>   */
>>
>>  #include "tests.h"
>> +#include <string.h>
>>  #include <stdio.h>
>>  #include <sys/socket.h>
>> +#include <arpa/inet.h>
>>  #include "netlink.h"
>> +#include "netlink_kobject_uevent.h"
>> +
>> +static void
>> +test_nlmsg_type_udev(const int fd)
>> +{
>> +     long ret;
>> +     const char *err_rc;
>> +     unsigned int offset = 8;
>> +     struct udev_monitor_netlink_header uh = {
>> +             .prefix = "libudev",
>> +             .magic = htonl(0xfeedcafe),
>> +             .header_size = sizeof(uh),
>> +             .properties_off = 40,
>> +             .properties_len = 299,
>> +             .filter_subsystem_hash = htonl(0xc370b302),
>> +             .filter_devtype_hash = htonl(0x10800000),
>> +             .filter_tag_bloom_hi = htonl(0x2000400),
>> +             .filter_tag_bloom_lo = htonl(0x10800000),
>> +     };
>> +     unsigned int len = sizeof(uh);
>> +     char buf[len + offset];
>> +     memcpy(buf, &uh, len);
>> +     memcpy(buf + len, "12345678", offset);
>> +
>> +     ret = sendto(fd, &buf, len + offset, MSG_DONTWAIT, NULL, 0);
>> +     err_rc = sprintrc(ret);
>> +     printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
>> +            ", header_size=%u, properties_off=%u, properties_len=%u"
>> +            ", filter_subsystem_hash=htonl(%#x)"
>> +            ", filter_devtype_hash=htonl(%#x)"
>> +            ", filter_tag_bloom_hi=htonl(%#x)"
>> +            ", filter_tag_bloom_lo=htonl(%#x)}, "
>> +            , fd, uh.prefix,
>> +            ntohl(uh.magic), uh.header_size, uh.properties_off,
>> +            uh.properties_len, ntohl(uh.filter_subsystem_hash),
>> +            ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
>> +            ntohl(uh.filter_tag_bloom_lo));
>> +     print_quoted_memory(buf + len, offset);
>> +     printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
>> +            len + offset, err_rc);
>> +
>> +}
>> +
>> +static void
>> +test_nlmsg_type_kernel(const int fd)
>> +{
>> +     long ret;
>> +     struct udev_monitor_netlink_header uh = {
>> +             .prefix = "change@",
>> +             .magic = htonl(0xfeedcafe),
>> +             .header_size = sizeof(uh),
>> +             .properties_off = 10,
>> +             .properties_len = 299,
>> +             .filter_subsystem_hash = htonl(0xfffffff),
>> +             .filter_devtype_hash = htonl(0x10000000),
>> +             .filter_tag_bloom_hi = htonl(0x2000400),
>> +     };
>> +
>> +     ret = sendto(fd, &uh, sizeof(uh), MSG_DONTWAIT, NULL, 0);
>> +     printf("sendto(%d, ", fd);
>> +     print_quoted_memory(&uh, sizeof(uh) - 8);
>> +     printf("..., %u, MSG_DONTWAIT, NULL, 0) = %s\n",
>> +            (unsigned) sizeof(uh), sprintrc(ret));
>
> Note that at this point errno may be already clobbered by earlier printf
> calls, and sprintrc(ret) may print garbage.  sprintrc has to be invoked
> before the first printf call, and its return code saved for future use.

Sorry, for the repeated patches. I'll try to send better patches from next time.
Thanks for your time to review .

Regards,
Harsha Sharma
>
> --
> ldv


More information about the Strace-devel mailing list