// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "shill/net/rtnl_message.h"

#include <linux/fib_rules.h>
#include <linux/if.h>  // NOLINT(build/include_alpha) - needs sockaddr.
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>

#include <regex>
#include <string>

#include <gtest/gtest.h>

#include "shill/net/byte_string.h"
#include "shill/net/ip_address.h"

using std::string;
using testing::Test;

namespace shill {

namespace {

// These test strings were generated by cutting up the output of the
// "rtmon" utility into individual strings.  This tool outputs the raw
// RTNL packet contents sent by the kernel.  The comments above each
// of these strings is the markup that the "ip monitor" command
// outputs for each of these RTNL packets.

// 2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
//     link/ether c0:f8:da:05:03:0b brd ff:ff:ff:ff:ff:ff

const int kNewLinkMessageWlan0InterfaceIndex = 2;
const unsigned int kNewLinkMessageWlan0InterfaceFlags =
    IFF_BROADCAST | IFF_MULTICAST | IFF_UP | IFF_LOWER_UP | IFF_RUNNING;
const unsigned int kNewLinkMessageWlan0InterfaceFlagsChange = 0;
const uint32_t kNewLinkMessageWlan0MTU = 1500;
const char kNewLinkMessageWlan0MacAddress[] = "\xc0\xf8\xda\x05\x03\x0b";
const char kNewLinkMessageWlan0InterfaceName[] = "wlan0";
const char kNewLinkMessageWlan0Qdisc[] = "mq";
const int kNewLinkMessageWlan0OperState = IF_OPER_UP;

const unsigned char kNewLinkMessageWlan0[] = {
    0xe0, 0x03, 0x00, 0x00, 0x10, 0x00, 0x02, 0x00, 0x53, 0x18, 0x1f, 0x4e,
    0xac, 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00,
    0x43, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x03, 0x00,
    0x77, 0x6c, 0x61, 0x6e, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0d, 0x00,
    0xe8, 0x03, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00,
    0x05, 0x00, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
    0xdc, 0x05, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x6d, 0x71, 0x00, 0x00,
    0x20, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x01, 0x00,
    0xc0, 0xf8, 0xda, 0x05, 0x03, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x02, 0x00,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x60, 0x00, 0x07, 0x00,
    0xa6, 0x65, 0x0f, 0x00, 0xa6, 0x0b, 0x00, 0x00, 0xd2, 0x29, 0x61, 0x06,
    0xd7, 0x25, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x84, 0x53, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x17, 0x00,
    0xa6, 0x65, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0b, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xd2, 0x29, 0x61, 0x06, 0x00, 0x00, 0x00, 0x00,
    0xd7, 0x25, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x84, 0x53, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x30, 0x02, 0x1a, 0x00, 0x6c, 0x00, 0x02, 0x00, 0x68, 0x00, 0x01, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x0a, 0x00, 0x08, 0x00, 0x01, 0x00,
    0x10, 0x00, 0x00, 0x80, 0x14, 0x00, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00,
    0x22, 0x05, 0x00, 0x00, 0x4f, 0x53, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00,
    0x78, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
    0xdc, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
    0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x80, 0x3a, 0x09, 0x00, 0x80, 0x51, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00,
    0x58, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xfc, 0x00, 0x03, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x15, 0xe6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x15, 0xe6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x9b, 0x95, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x9b, 0x95, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00,
    0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x2c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

const int kNewLinkMessageIbf1InterfaceIndex = 17;
const char kNewLinkMessageIbf1InterfaceName[] = "ifb1";

const unsigned char kNewLinkMessageIfb1[] = {
    0xec, 0x04, 0x00, 0x00, 0x10, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
    0x2a, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x11, 0x00, 0x00, 0x00,
    0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x03, 0x00,
    0x69, 0x66, 0x62, 0x31, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0d, 0x00,
    0x20, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00,
    0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
    0xdc, 0x05, 0x00, 0x00, 0x08, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x08, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x1f, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x28, 0x00, 0xff, 0xff, 0x00, 0x00,
    0x08, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x20, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x09, 0x00, 0x06, 0x00, 0x6e, 0x6f, 0x6f, 0x70, 0x00, 0x00, 0x00, 0x00,
    0x08, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x27, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x01, 0x00, 0xa2, 0xdc, 0xe7, 0xa3,
    0xd5, 0xfc, 0x00, 0x00, 0x0a, 0x00, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0x00, 0x00, 0xbc, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x60, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x0c, 0x00, 0x12, 0x00, 0x08, 0x00, 0x01, 0x00, 0x69, 0x66, 0x62, 0x00,
    0xe8, 0x02, 0x1a, 0x00, 0x7c, 0x00, 0x02, 0x00, 0x78, 0x00, 0x01, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00,
    0xe8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x02, 0x0a, 0x00,
    0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x05, 0x00,
    0xff, 0xff, 0x00, 0x00, 0xd5, 0x23, 0x02, 0x00, 0x65, 0x77, 0x00, 0x00,
    0xe8, 0x03, 0x00, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x40, 0x00, 0x00, 0x00, 0xdc, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0xff, 0xff, 0xff, 0xff, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x80, 0x3a, 0x09, 0x00, 0x80, 0x51, 0x01, 0x00,
    0x03, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x00, 0x60, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00,
    0xe8, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x80, 0xee, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x03, 0x00, 0x25, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x07, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
};

// Deleted 8: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
//    link/ether 68:7f:74:ba:ef:c7 brd ff:ff:ff:ff:ff:ff

const int kDelLinkMessageEth0InterfaceIndex = 8;
const unsigned int kDelLinkMessageEth0InterfaceFlags =
    IFF_BROADCAST | IFF_MULTICAST;
const unsigned int kDelLinkMessageEth0InterfaceFlagsChange = 0xffffffff;
const uint32_t kDelLinkMessageEth0MTU = 1500;
const char kDelLinkMessageEth0MacAddress[] = "\x68\x7f\x74\xba\xef\xc7";
const char kDelLinkMessageEth0InterfacName[] = "eth0";
const char kDelLinkMessageEth0Qdisc[] = "noop";
const int kDelLinkMessageEth0OperState = IF_OPER_DOWN;

const unsigned char kDelLinkMessageEth0[] = {
    0xb8, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,
    0x02, 0x10, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x09, 0x00, 0x03, 0x00,
    0x65, 0x74, 0x68, 0x30, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0d, 0x00,
    0xe8, 0x03, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00,
    0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
    0xdc, 0x05, 0x00, 0x00, 0x09, 0x00, 0x06, 0x00, 0x6e, 0x6f, 0x6f, 0x70,
    0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x0a, 0x00, 0x01, 0x00, 0x68, 0x7f, 0x74, 0xba, 0xef, 0xc7, 0x00, 0x00,
    0x0a, 0x00, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
    0x60, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
    0xfa, 0x05, 0x00, 0x00, 0x34, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xbc, 0x00, 0x17, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x05, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x34, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x15, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x1a, 0x00,
};

// 8: if8    inet 192.168.10.100/24 brd 192.168.10.255 scope global eth0

const int kNewAddrIPV4InterfaceIndex = 8;
const char kNewAddrIPV4Address[] = "192.168.10.100";
const int kNewAddrIPV4AddressPrefix = 24;
const unsigned char kNewAddrIPV4Scope = RT_SCOPE_UNIVERSE;

const unsigned char kNewAddrIPV4[] = {
    0x3c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x02, 0x18, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00,
    0x08, 0x00, 0x01, 0x00, 0xc0, 0xa8, 0x0a, 0x64, 0x08, 0x00, 0x02, 0x00,
    0xc0, 0xa8, 0x0a, 0x64, 0x08, 0x00, 0x04, 0x00, 0xc0, 0xa8, 0x0a, 0xff,
    0x09, 0x00, 0x03, 0x00, 0x65, 0x74, 0x68, 0x30, 0x00, 0x00, 0x00, 0x00,
};

// Deleted 15: if15    inet6 fe80::6a7f:74ff:feba:efc7/64 scope link
//       valid_lft forever preferred_lft forever

const int kDelAddrIPV6InterfaceIndex = 15;
const char kDelAddrIPV6Address[] = "fe80::6a7f:74ff:feba:efc7";
const int kDelAddrIPV6AddressPrefix = 64;
const unsigned char kDelAddrIPV6Scope = RT_SCOPE_LINK;

const unsigned char kDelAddrIPV6[] = {
    0x40, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x40, 0x80, 0xfd, 0x0f, 0x00,
    0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0xfe, 0x80, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x6a, 0x7f, 0x74, 0xff, 0xfe, 0xba, 0xef, 0xc7,
    0x14, 0x00, 0x06, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xbf, 0xdb, 0x02, 0x00, 0xbf, 0xdb, 0x02, 0x00,
};

// Deleted ff02::1:ffa0:688 via ff02::1:ffa0:688 dev if2  metric 0

const int kDelRouteIPV6InterfaceIndex = 2;
const char kDelRouteIPV6Address[] = "ff02::1:ffa0:688";
const int kDelRouteIPV6Prefix = 128;
const int kDelRouteIPV6Metric = 0;

const unsigned char kDelRouteIPV6[] = {
    0x80, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x01,
    0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x0f, 0x00, 0xfe, 0x00, 0x00, 0x00,
    0x14, 0x00, 0x01, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x01, 0xff, 0xa0, 0x06, 0x88, 0x14, 0x00, 0x05, 0x00,
    0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
    0xff, 0xa0, 0x06, 0x88, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00,
    0x08, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0c, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x5f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

// default via 192.168.17.254 dev if12  metric 9

const int kAddRouteIPV4InterfaceIndex = 12;
const char kAddRouteIPV4Address[] = "192.168.17.254";
const int kAddRouteIPV4Metric = 9;

const unsigned char kAddRouteIPV4[] = {
    0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0f, 0x00, 0xfe, 0x00, 0x00, 0x00,
    0x08, 0x00, 0x06, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x05, 0x00,
    0xc0, 0xa8, 0x11, 0xfe, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
};

// This is the same as kAddRouteIPV4 above, except manually corrupted
// the second to last parameter
const unsigned char kAddRouteBusted[] = {
    0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0f, 0x00, 0xfe, 0x00, 0x00, 0x00,
    0x08, 0x00, 0x06, 0x00, 0x09, 0x00, 0x00, 0x00, 0x28, 0x00, 0x05, 0x00,
    0xc0, 0xa8, 0x11, 0xfe, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
};

// 192.168.10.1 dev if8 lladdr 00:14:d1:cd:d5:2c REACHABLE
const unsigned char kAddNeighborMessage[] = {
    0x4c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00,
    0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x08, 0x00, 0x01, 0x00, 0xc0,
    0xa8, 0x0a, 0x01, 0x0a, 0x00, 0x02, 0x00, 0x00, 0x14, 0xd1, 0xcd,
    0xd5, 0x2c, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,
    0x00, 0x14, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
};

// RDNSS notification
// Lifetime: infinity (0xffffffff)
// Server addresses: 2001:db8:100:f101::1, 2001:db8:100:f101::2
const unsigned char kNdRdnssMessage[] = {
    0x5c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x28, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x86, 0x00, 0x03, 0x00, 0x14, 0x00, 0x01, 0x00, 0x19, 0x05, 0x00, 0x00,
    0xff, 0xff, 0xff, 0xff, 0x20, 0x01, 0x0d, 0xb8, 0x01, 0x00, 0xf1, 0x01,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8,
    0x01, 0x00, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
    0x14, 0x00, 0x01, 0x00, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x50, 0xf8, 0x86, 0xff,
};

// Add IPv4 rule for src 100.87.84.110/24 table 1002
const unsigned char kRuleMessage1[] = {
    0x3C, 0x0, 0x0, 0x0, 0x20, 0x0,  0x0,  0x0,  0x39, 0x0,  0x0,  0x0,
    0xCE, 0x4, 0x0, 0x0, 0x2,  0x0,  0x18, 0x0,  0xFC, 0x0,  0x0,  0x1,
    0x0,  0x0, 0x0, 0x0, 0x8,  0x0,  0xF,  0x0,  0xEA, 0x3,  0x0,  0x0,
    0x8,  0x0, 0xE, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x8,  0x0,  0x6,  0x0,
    0xA,  0x0, 0x0, 0x0, 0x8,  0x0,  0x2,  0x0,  0x64, 0x57, 0x54, 0x6E};

// Delete IPv4 rule for iif eth0 table 1002
const unsigned char kRuleMessage2[] = {
    0x40, 0x0,  0x0,  0x0,  0x21, 0x0, 0x0,  0x0,  0xFA, 0x0,  0x0,  0x0,  0x60,
    0x4,  0x0,  0x0,  0x2,  0x0,  0x0, 0x0,  0xFC, 0x0,  0x0,  0x1,  0x0,  0x0,
    0x0,  0x0,  0x8,  0x0,  0xF,  0x0, 0xEA, 0x3,  0x0,  0x0,  0x8,  0x0,  0xE,
    0x0,  0xFF, 0xFF, 0xFF, 0xFF, 0x9, 0x0,  0x3,  0x0,  0x65, 0x74, 0x68, 0x30,
    0x0,  0x0,  0x0,  0x0,  0x8,  0x0, 0x6,  0x0,  0xA,  0x0,  0x0,  0x0};

// Add IPv4 rule for fwmark 0x1234/0xFFFF table 1002
const unsigned char kRuleMessage3[] = {
    0x44, 0x0, 0x0,  0x0, 0x20, 0x0,  0x0,  0x0,  0x87, 0xB1, 0xA1, 0x5E,
    0xD0, 0xE, 0x0,  0x0, 0x2,  0x0,  0x0,  0x0,  0xFC, 0x0,  0x0,  0x1,
    0x0,  0x0, 0x0,  0x0, 0x8,  0x0,  0xF,  0x0,  0xEA, 0x3,  0x0,  0x0,
    0x8,  0x0, 0xE,  0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x8,  0x0,  0x6,  0x0,
    0x8,  0x0, 0x0,  0x0, 0x8,  0x0,  0xA,  0x0,  0x34, 0x12, 0x0,  0x0,
    0x8,  0x0, 0x10, 0x0, 0xFF, 0xFF, 0x0,  0x0};

// Add IPv6 rule for table 1002
const unsigned char kRuleMessage4[] = {
    0x2c, 0x0,  0x0, 0x0, 0x20, 0x0, 0x2, 0x0,  0x2,  0x0,  0x0,
    0x0,  0xce, 0x4, 0x0, 0x0,  0xa, 0x0, 0x0,  0x0,  0xff, 0x0,
    0x0,  0x1,  0x0, 0x0, 0x0,  0x0, 0x8, 0x0,  0xf,  0x0,  0xff,
    0x0,  0x0,  0x0, 0x8, 0x0,  0xe, 0x0, 0xff, 0xff, 0xff, 0xff};

}  // namespace

class RTNLMessageTest : public Test {
 protected:
  void TestParseLink(const ByteString& packet,
                     RTNLMessage::Mode mode,
                     int interface_index,
                     unsigned int flags,
                     unsigned int change,
                     ByteString address,
                     std::string name,
                     uint32_t mtu,
                     ByteString qdisc,
                     int oper_state) {
    RTNLMessage msg;
    EXPECT_TRUE(msg.Decode(packet));

    EXPECT_EQ(RTNLMessage::kTypeLink, msg.type());
    EXPECT_EQ(mode, msg.mode());
    EXPECT_EQ(interface_index, msg.interface_index());

    RTNLMessage::LinkStatus status = msg.link_status();
    EXPECT_EQ(flags, status.flags);
    EXPECT_EQ(change, status.change);

    EXPECT_TRUE(msg.HasAttribute(IFLA_ADDRESS));
    EXPECT_EQ(address.GetLength(), msg.GetAttribute(IFLA_ADDRESS).GetLength());
    EXPECT_TRUE(msg.GetAttribute(IFLA_ADDRESS).Equals(address));

    ByteString bytestring_name(name, true);
    EXPECT_TRUE(msg.HasAttribute(IFLA_IFNAME));
    EXPECT_EQ(bytestring_name.GetLength(),
              msg.GetAttribute(IFLA_IFNAME).GetLength());
    EXPECT_TRUE(msg.GetAttribute(IFLA_IFNAME).Equals(bytestring_name));
    EXPECT_EQ(name, msg.GetIflaIfname());

    EXPECT_TRUE(msg.HasAttribute(IFLA_MTU));
    uint32_t mtu_val;
    EXPECT_TRUE(msg.GetAttribute(IFLA_MTU).ConvertToCPUUInt32(&mtu_val));
    EXPECT_EQ(mtu, mtu_val);

    EXPECT_TRUE(msg.HasAttribute(IFLA_QDISC));
    EXPECT_EQ(qdisc.GetLength(), msg.GetAttribute(IFLA_QDISC).GetLength());
    EXPECT_TRUE(msg.GetAttribute(IFLA_QDISC).Equals(qdisc));

    EXPECT_TRUE(msg.HasAttribute(IFLA_OPERSTATE));
    EXPECT_EQ(oper_state, msg.GetAttribute(IFLA_OPERSTATE).GetConstData()[0]);
  }

  void TestParseAddress(const ByteString& packet,
                        RTNLMessage::Mode mode,
                        int interface_index,
                        const IPAddress& address,
                        unsigned char scope) {
    RTNLMessage msg;

    EXPECT_TRUE(msg.Decode(packet));
    EXPECT_EQ(RTNLMessage::kTypeAddress, msg.type());
    EXPECT_EQ(mode, msg.mode());
    EXPECT_EQ(interface_index, msg.interface_index());
    EXPECT_EQ(address.family(), msg.family());

    RTNLMessage::AddressStatus status = msg.address_status();
    EXPECT_EQ(scope, status.scope);

    EXPECT_TRUE(msg.HasAttribute(IFA_ADDRESS));
    EXPECT_EQ(address.GetLength(), msg.GetAttribute(IFA_ADDRESS).GetLength());
    EXPECT_TRUE(IPAddress(address.family(), msg.GetAttribute(IFA_ADDRESS),
                          status.prefix_len)
                    .Equals(address));
    EXPECT_TRUE(msg.GetIfaAddress().IsValid());
    EXPECT_TRUE(msg.GetIfaAddress().Equals(address));
  }

  void TestParseRoute(const ByteString& packet,
                      RTNLMessage::Mode /*mode*/,
                      IPAddress::Family family,
                      int interface_index,
                      const IPAddress& dst,
                      const IPAddress& src,
                      const IPAddress& gateway,
                      unsigned char table,
                      int protocol,
                      unsigned char scope,
                      unsigned char type,
                      int metric) {
    RTNLMessage msg;

    EXPECT_TRUE(msg.Decode(packet));
    EXPECT_EQ(RTNLMessage::kTypeRoute, msg.type());
    EXPECT_EQ(0, msg.interface_index());
    EXPECT_EQ(family, msg.family());

    RTNLMessage::RouteStatus status = msg.route_status();
    EXPECT_EQ(table, status.table);
    EXPECT_EQ(protocol, status.protocol);
    EXPECT_EQ(scope, status.scope);
    EXPECT_EQ(type, status.type);

    if (!dst.IsDefault()) {
      EXPECT_TRUE(msg.HasAttribute(RTA_DST));
      EXPECT_TRUE(
          IPAddress(family, msg.GetAttribute(RTA_DST), status.dst_prefix)
              .Equals(dst));
      EXPECT_TRUE(msg.GetRtaDst().Equals(dst));
    }

    if (!src.IsDefault()) {
      EXPECT_TRUE(msg.HasAttribute(RTA_SRC));
      EXPECT_TRUE(
          IPAddress(family, msg.GetAttribute(RTA_SRC), status.src_prefix)
              .Equals(src));
      EXPECT_TRUE(msg.GetRtaSrc().Equals(src));
    }

    if (!gateway.IsDefault()) {
      EXPECT_TRUE(msg.HasAttribute(RTA_GATEWAY));
      EXPECT_TRUE(
          IPAddress(family, msg.GetAttribute(RTA_GATEWAY)).Equals(gateway));
      EXPECT_TRUE(msg.GetRtaGateway().Equals(gateway));
    }

    if (interface_index >= 0) {
      EXPECT_TRUE(msg.HasAttribute(RTA_OIF));
      uint32_t int_val;
      EXPECT_TRUE(msg.GetAttribute(RTA_OIF).ConvertToCPUUInt32(&int_val));
      EXPECT_EQ(interface_index, int_val);
      EXPECT_EQ(interface_index, msg.GetRtaOif());
    } else {
      EXPECT_FALSE(msg.HasAttribute(RTA_OIF));
    }
    if (metric >= 0) {
      EXPECT_TRUE(msg.HasAttribute(RTA_PRIORITY));
      uint32_t metric_val;
      EXPECT_TRUE(
          msg.GetAttribute(RTA_PRIORITY).ConvertToCPUUInt32(&metric_val));
      EXPECT_EQ(metric, metric_val);
    } else {
      EXPECT_FALSE(msg.HasAttribute(RTA_PRIORITY));
    }
  }

  void TestParseRule(const ByteString& packet,
                     RTNLMessage::Mode /*mode*/,
                     IPAddress::Family family,
                     unsigned char table,
                     int protocol,
                     unsigned char scope,
                     unsigned char type,
                     const IPAddress& dst,
                     const IPAddress& src,
                     uint32_t priority,
                     uint32_t fwmark,
                     uint32_t fwmask,
                     uint32_t uidrange_start,
                     uint32_t uidrange_end,
                     const std::string& ifname) {
    RTNLMessage msg;

    EXPECT_TRUE(msg.Decode(packet));
    EXPECT_EQ(RTNLMessage::kTypeRule, msg.type());
    EXPECT_EQ(0, msg.interface_index());
    EXPECT_EQ(family, msg.family());

    RTNLMessage::RouteStatus status = msg.route_status();
    EXPECT_EQ(table, status.table);
    EXPECT_EQ(protocol, status.protocol);
    EXPECT_EQ(scope, status.scope);
    EXPECT_EQ(type, status.type);

    if (!dst.IsDefault()) {
      EXPECT_TRUE(msg.HasAttribute(FRA_DST));
      EXPECT_TRUE(
          IPAddress(family, msg.GetAttribute(FRA_DST), status.dst_prefix)
              .Equals(dst));
    }

    if (!src.IsDefault()) {
      EXPECT_TRUE(msg.HasAttribute(FRA_SRC));
      EXPECT_TRUE(
          IPAddress(family, msg.GetAttribute(FRA_SRC), status.src_prefix)
              .Equals(src));
    }

    EXPECT_TRUE(msg.HasAttribute(FRA_PRIORITY));
    uint32_t decoded_priority;
    EXPECT_TRUE(
        msg.GetAttribute(FRA_PRIORITY).ConvertToCPUUInt32(&decoded_priority));
    EXPECT_EQ(priority, decoded_priority);

    if (fwmark || fwmask) {
      EXPECT_TRUE(msg.HasAttribute(FRA_FWMARK));
      EXPECT_TRUE(msg.HasAttribute(FRA_FWMASK));

      uint32_t decoded_fwmark, decoded_fwmask;
      EXPECT_TRUE(
          msg.GetAttribute(FRA_FWMARK).ConvertToCPUUInt32(&decoded_fwmark));
      EXPECT_TRUE(
          msg.GetAttribute(FRA_FWMASK).ConvertToCPUUInt32(&decoded_fwmask));
      EXPECT_EQ(fwmark, decoded_fwmark);
      EXPECT_EQ(fwmask, decoded_fwmask);
    } else {
      EXPECT_FALSE(msg.HasAttribute(FRA_FWMARK));
      EXPECT_FALSE(msg.HasAttribute(FRA_FWMASK));
    }

    if (uidrange_start || uidrange_end) {
      EXPECT_TRUE(msg.HasAttribute(FRA_UID_RANGE));

      struct fib_rule_uid_range decoded_range;
      EXPECT_TRUE(msg.GetAttribute(FRA_UID_RANGE)
                      .CopyData(sizeof(decoded_range), &decoded_range));
      EXPECT_EQ(uidrange_start, decoded_range.start);
      EXPECT_EQ(uidrange_end, decoded_range.end);
    } else {
      EXPECT_FALSE(msg.HasAttribute(FRA_UID_RANGE));
    }

    if (!ifname.empty()) {
      EXPECT_TRUE(msg.HasAttribute(FRA_IFNAME));
      std::string decoded_ifname;
      decoded_ifname = reinterpret_cast<const char*>(
          msg.GetAttribute(FRA_IFNAME).GetConstData());
      EXPECT_STREQ(ifname.c_str(), decoded_ifname.c_str());
    } else {
      EXPECT_FALSE(msg.HasAttribute(FRA_IFNAME));
    }
  }

  void TestParseRdnss(const ByteString& packet,
                      RTNLMessage::Mode mode,
                      int interface_index,
                      uint32_t lifetime,
                      const std::string& dns_server_addresses) {
    RTNLMessage msg;

    EXPECT_TRUE(msg.Decode(packet));
    EXPECT_EQ(RTNLMessage::kTypeRdnss, msg.type());
    EXPECT_EQ(mode, msg.mode());
    EXPECT_EQ(interface_index, msg.interface_index());

    RTNLMessage::RdnssOption rdnss = msg.rdnss_option();

    // Format addresses string for verification.
    std::string addresses;
    bool first = true;
    for (auto& ip : rdnss.addresses) {
      if (!first) {
        addresses += ", ";
      } else {
        first = false;
      }
      addresses += ip.ToString();
    }

    // Verify life time and addresses.
    EXPECT_EQ(lifetime, rdnss.lifetime);
    EXPECT_EQ(dns_server_addresses, addresses);
  }

  void TestParseNeighbor(const ByteString& packet,
                         RTNLMessage::Mode mode,
                         IPAddress::Family family,
                         int interface_index,
                         uint16_t state,
                         uint8_t flags,
                         uint8_t type) {
    RTNLMessage msg;

    EXPECT_TRUE(msg.Decode(packet));
    EXPECT_EQ(RTNLMessage::kTypeNeighbor, msg.type());
    EXPECT_EQ(mode, msg.mode());
    EXPECT_EQ(family, msg.family());
    EXPECT_EQ(interface_index, msg.interface_index());

    RTNLMessage::NeighborStatus neighbor = msg.neighbor_status();

    EXPECT_EQ(neighbor.state, state);
    EXPECT_EQ(neighbor.flags, flags);
    EXPECT_EQ(neighbor.type, type);
  }
};

TEST_F(RTNLMessageTest, NewLinkWlan0) {
  TestParseLink(ByteString(kNewLinkMessageWlan0, sizeof(kNewLinkMessageWlan0)),
                RTNLMessage::kModeAdd, kNewLinkMessageWlan0InterfaceIndex,
                kNewLinkMessageWlan0InterfaceFlags,
                kNewLinkMessageWlan0InterfaceFlagsChange,
                ByteString(string(kNewLinkMessageWlan0MacAddress), false),
                string(kNewLinkMessageWlan0InterfaceName),
                kNewLinkMessageWlan0MTU,
                ByteString(string(kNewLinkMessageWlan0Qdisc), true),
                kNewLinkMessageWlan0OperState);
}

TEST_F(RTNLMessageTest, NewLinkIfb1) {
  RTNLMessage msg;
  EXPECT_TRUE(
      msg.Decode(ByteString(kNewLinkMessageIfb1, sizeof(kNewLinkMessageIfb1))));
  EXPECT_EQ(RTNLMessage::kTypeLink, msg.type());

  EXPECT_EQ(RTNLMessage::kModeAdd, msg.mode());
  EXPECT_EQ(kNewLinkMessageIbf1InterfaceIndex, msg.interface_index());

  ByteString name(string(kNewLinkMessageIbf1InterfaceName), true);
  EXPECT_TRUE(msg.HasAttribute(IFLA_IFNAME));
  EXPECT_EQ(name.GetLength(), msg.GetAttribute(IFLA_IFNAME).GetLength());
  EXPECT_TRUE(msg.GetAttribute(IFLA_IFNAME).Equals(name));

  EXPECT_TRUE(msg.HasAttribute(IFLA_LINKINFO));
  EXPECT_STREQ("ifb", msg.link_status().kind.value().c_str());
}

TEST_F(RTNLMessageTest, DelLinkEth0) {
  TestParseLink(ByteString(kDelLinkMessageEth0, sizeof(kDelLinkMessageEth0)),
                RTNLMessage::kModeDelete, kDelLinkMessageEth0InterfaceIndex,
                kDelLinkMessageEth0InterfaceFlags,
                kDelLinkMessageEth0InterfaceFlagsChange,
                ByteString(string(kDelLinkMessageEth0MacAddress), false),
                string(kDelLinkMessageEth0InterfacName), kDelLinkMessageEth0MTU,
                ByteString(string(kDelLinkMessageEth0Qdisc), true),
                kDelLinkMessageEth0OperState);
}

TEST_F(RTNLMessageTest, NewAddrIPv4) {
  IPAddress addr(IPAddress::kFamilyIPv4);

  EXPECT_TRUE(addr.SetAddressFromString(kNewAddrIPV4Address));
  addr.set_prefix(kNewAddrIPV4AddressPrefix);
  TestParseAddress(ByteString(kNewAddrIPV4, sizeof(kNewAddrIPV4)),
                   RTNLMessage::kModeAdd, kNewAddrIPV4InterfaceIndex, addr,
                   kNewAddrIPV4Scope);
}

TEST_F(RTNLMessageTest, DelAddrIPv6) {
  IPAddress addr(IPAddress::kFamilyIPv6);

  EXPECT_TRUE(addr.SetAddressFromString(kDelAddrIPV6Address));
  addr.set_prefix(kDelAddrIPV6AddressPrefix);
  TestParseAddress(ByteString(kDelAddrIPV6, sizeof(kDelAddrIPV6)),
                   RTNLMessage::kModeDelete, kDelAddrIPV6InterfaceIndex, addr,
                   kDelAddrIPV6Scope);
}

TEST_F(RTNLMessageTest, DelRouteIPv6) {
  IPAddress dst(IPAddress::kFamilyIPv6);
  IPAddress src(IPAddress::kFamilyIPv6);
  IPAddress gateway(IPAddress::kFamilyIPv6);

  EXPECT_TRUE(dst.SetAddressFromString(kDelRouteIPV6Address));
  dst.set_prefix(kDelRouteIPV6Prefix);
  src.SetAddressToDefault();
  EXPECT_TRUE(gateway.SetAddressFromString(kDelRouteIPV6Address));

  TestParseRoute(ByteString(kDelRouteIPV6, sizeof(kDelRouteIPV6)),
                 RTNLMessage::kModeDelete, IPAddress::kFamilyIPv6,
                 kDelRouteIPV6InterfaceIndex, dst, src, gateway, RT_TABLE_MAIN,
                 RTPROT_UNSPEC, RT_SCOPE_UNIVERSE, RTN_UNICAST,
                 kDelRouteIPV6Metric);
}

TEST_F(RTNLMessageTest, AddRouteIPv4) {
  IPAddress dst(IPAddress::kFamilyIPv4);
  IPAddress src(IPAddress::kFamilyIPv4);
  IPAddress gateway(IPAddress::kFamilyIPv4);

  dst.SetAddressToDefault();
  src.SetAddressToDefault();
  EXPECT_TRUE(gateway.SetAddressFromString(kAddRouteIPV4Address));

  TestParseRoute(ByteString(kAddRouteIPV4, sizeof(kAddRouteIPV4)),
                 RTNLMessage::kModeAdd, IPAddress::kFamilyIPv4,
                 kAddRouteIPV4InterfaceIndex, dst, src, gateway, RT_TABLE_MAIN,
                 RTPROT_BOOT, RT_SCOPE_UNIVERSE, RTN_UNICAST,
                 kAddRouteIPV4Metric);
}

TEST_F(RTNLMessageTest, NewRdnssOption) {
  int interface_index = 1;
  uint32_t lifetime = 0xffffffff;
  std::string dns_server_addresses =
      "2001:db8:100:f101::1, 2001:db8:100:f101::2";

  TestParseRdnss(ByteString(kNdRdnssMessage, sizeof(kNdRdnssMessage)),
                 RTNLMessage::kModeAdd, interface_index, lifetime,
                 dns_server_addresses);
}

TEST_F(RTNLMessageTest, ParseRuleEvents) {
  struct {
    const unsigned char* payload;
    size_t length;
    std::string iif;
    std::string oif;
    IPAddress src;
    IPAddress dst;
    uint32_t fwmark;
    uint32_t fwmask;
    uint32_t table;
    uint32_t priority;
  } test_cases[] = {
      {kRuleMessage1, sizeof(kRuleMessage1), "", "",
       IPAddress("100.87.84.110", 24), IPAddress(), 0, 0, 1002, 10},
      {kRuleMessage2, sizeof(kRuleMessage2), "eth0", "", IPAddress(),
       IPAddress(), 0, 0, 1002, 10},
      {kRuleMessage3, sizeof(kRuleMessage3), "", "", IPAddress(), IPAddress(),
       0x1234, 0xffff, 1002, 8},
      {kRuleMessage4, sizeof(kRuleMessage4), "", "", IPAddress(), IPAddress(),
       0, 0, 255, 0},
  };
  for (const auto& tt : test_cases) {
    RTNLMessage msg;
    EXPECT_TRUE(msg.Decode(ByteString(tt.payload, tt.length)));
    EXPECT_EQ(tt.iif, msg.GetFraIifname());
    EXPECT_EQ(tt.oif, msg.GetFraOifname());
    EXPECT_EQ(tt.src.ToString(), msg.GetFraSrc().ToString());
    EXPECT_EQ(tt.dst.ToString(), msg.GetFraDst().ToString());
    EXPECT_EQ(tt.fwmark, msg.GetFraFwmark());
    EXPECT_EQ(tt.fwmask, msg.GetFraFwmask());
    EXPECT_EQ(tt.table, msg.GetFraTable());
    EXPECT_EQ(tt.priority, msg.GetFraPriority());
  }
}

TEST_F(RTNLMessageTest, AddRouteBusted) {
  // RTNLMessage should list parse errors as kMessageUnknown
  RTNLMessage msg;
  EXPECT_FALSE(
      msg.Decode(ByteString(kAddRouteBusted, sizeof(kAddRouteBusted))));
}

TEST_F(RTNLMessageTest, AddNeighbor) {
  TestParseNeighbor(
      ByteString(kAddNeighborMessage, sizeof(kAddNeighborMessage)),
      RTNLMessage::kModeAdd, IPAddress::kFamilyIPv4, 8, NUD_REACHABLE, 0,
      NDA_DST);
}

TEST_F(RTNLMessageTest, EncodeDelNeighbor) {
  RTNLMessage msg(RTNLMessage::kTypeNeighbor, RTNLMessage::kModeDelete, 0, 1, 2,
                  0, IPAddress::kFamilyIPv4);
  msg.set_neighbor_status(
      RTNLMessage::NeighborStatus(0, NTF_ROUTER, NDA_LLADDR));

  TestParseNeighbor(msg.Encode(), RTNLMessage::kModeDelete,
                    IPAddress::kFamilyIPv4, 0, 0, NTF_ROUTER, NDA_LLADDR);
}

TEST_F(RTNLMessageTest, EncodeRouteAdd) {
  RTNLMessage msg(RTNLMessage::kTypeRoute, RTNLMessage::kModeAdd, 0, 1, 2, 0,
                  IPAddress::kFamilyIPv4);
  IPAddress dst(IPAddress::kFamilyIPv4);
  IPAddress src(IPAddress::kFamilyIPv4);
  IPAddress gateway(IPAddress::kFamilyIPv4);

  dst.SetAddressToDefault();
  src.SetAddressToDefault();
  EXPECT_TRUE(gateway.SetAddressFromString("192.168.0.1"));

  msg.set_route_status(RTNLMessage::RouteStatus(
      0, 0, RT_TABLE_MAIN, RTPROT_BOOT, RT_SCOPE_UNIVERSE, RTN_UNICAST, 0));
  msg.SetAttribute(RTA_DST, dst.address());
  msg.SetAttribute(RTA_SRC, src.address());
  msg.SetAttribute(RTA_GATEWAY, gateway.address());
  msg.SetAttribute(RTA_OIF, ByteString::CreateFromCPUUInt32(12));
  msg.SetAttribute(RTA_PRIORITY, ByteString::CreateFromCPUUInt32(13));

  TestParseRoute(msg.Encode(), RTNLMessage::kModeAdd, IPAddress::kFamilyIPv4,
                 12, dst, src, gateway, RT_TABLE_MAIN, RTPROT_BOOT,
                 RT_SCOPE_UNIVERSE, RTN_UNICAST, 13);
}

TEST_F(RTNLMessageTest, EncodeRuleAdd) {
  RTNLMessage msg(RTNLMessage::kTypeRule, RTNLMessage::kModeAdd, 0, 1, 2, 0,
                  IPAddress::kFamilyIPv4);
  IPAddress dst(IPAddress::kFamilyIPv4);
  IPAddress src(IPAddress::kFamilyIPv4);

  EXPECT_TRUE(dst.SetAddressFromString("192.168.1.0"));
  EXPECT_TRUE(src.SetAddressFromString("192.168.2.0"));

  msg.set_route_status(
      RTNLMessage::RouteStatus(dst.prefix(), src.prefix(), RT_TABLE_MAIN,
                               RTPROT_BOOT, RT_SCOPE_UNIVERSE, RTN_UNICAST, 0));
  msg.SetAttribute(FRA_DST, dst.address());
  msg.SetAttribute(FRA_SRC, src.address());

  msg.SetAttribute(FRA_PRIORITY, ByteString::CreateFromCPUUInt32(13));
  msg.SetAttribute(FRA_FWMARK, ByteString::CreateFromCPUUInt32(0x1234));
  msg.SetAttribute(FRA_FWMASK, ByteString::CreateFromCPUUInt32(0xffff));

  struct fib_rule_uid_range r = {.start = 1000, .end = 2000};
  msg.SetAttribute(
      FRA_UID_RANGE,
      ByteString(reinterpret_cast<const unsigned char*>(&r), sizeof(r)));

  msg.SetAttribute(FRA_IFNAME, ByteString(std::string("dummy0"), true));

  TestParseRule(msg.Encode(), RTNLMessage::kModeAdd, IPAddress::kFamilyIPv4,
                RT_TABLE_MAIN, RTPROT_BOOT, RT_SCOPE_UNIVERSE, RTN_UNICAST, dst,
                src, 13, 0x1234, 0xffff, 1000, 2000, "dummy0");
}

TEST_F(RTNLMessageTest, EncodeLinkDel) {
  const int kInterfaceIndex = 0x1234;
  RTNLMessage pmsg(RTNLMessage::kTypeLink, RTNLMessage::kModeDelete,
                   NLM_F_REQUEST, 0, 0, kInterfaceIndex,
                   IPAddress::kFamilyUnknown);

  RTNLMessage msg;
  EXPECT_TRUE(msg.Decode(pmsg.Encode()));

  EXPECT_EQ(RTNLMessage::kTypeLink, msg.type());
  EXPECT_EQ(RTNLMessage::kModeDelete, msg.mode());
  EXPECT_EQ(kInterfaceIndex, msg.interface_index());

  RTNLMessage::LinkStatus status = msg.link_status();
  EXPECT_EQ(0, status.flags);
  EXPECT_EQ(0, status.change);

  EXPECT_FALSE(msg.HasAttribute(IFLA_ADDRESS));
  EXPECT_FALSE(msg.HasAttribute(IFLA_IFNAME));
  EXPECT_FALSE(msg.HasAttribute(IFLA_MTU));
  EXPECT_FALSE(msg.HasAttribute(IFLA_QDISC));
  EXPECT_FALSE(msg.HasAttribute(IFLA_OPERSTATE));
}

TEST_F(RTNLMessageTest, ToString) {
  struct {
    const unsigned char* payload;
    size_t length;
    std::string regexp;
  } test_cases[] = {
      {kNewLinkMessageWlan0, sizeof(kNewLinkMessageWlan0),
       "Add Link: wlan0\\[2\\] type ETHER flags <BROADCAST,LOWER_UP,MULTICAST,"
       "RUNNING,UP> change 0"},
      {kNewLinkMessageIfb1, sizeof(kNewLinkMessageIfb1),
       "Add Link: ifb1\\[17\\] type ETHER flags <BROADCAST,NOARP> change 0 "
       "kind ifb"},
      {kDelLinkMessageEth0, sizeof(kDelLinkMessageEth0),
       "Delete Link: eth0\\[8\\] type ETHER flags <BROADCAST,MULTICAST> change "
       "FFFFFFFF"},
      // For Address events, the output interface index cannot be converted
      // after the fact using if_indextoname(), but can still happen to match an
      // unrelated interface on the unit test host. Escape it with \w*.
      {kNewAddrIPV4, sizeof(kNewAddrIPV4),
       "Add IPv4 Address: 192\\.168\\.10\\.100/24 if \\w*\\[8\\] flags "
       "PERMANENT scope 0"},
      {kDelAddrIPV6, sizeof(kDelAddrIPV6),
       "Delete IPv6 Address: fe80::6a7f:74ff:feba:efc7/64 if \\w*\\[15\\] "
       "flags PERMANENT scope 253"},
      {kAddRouteIPV4, sizeof(kAddRouteIPV4),
       // For routes, the output interface index cannot be converted after the
       // fact using if_indextoname(), but can still happen to match an
       // unrelated interface on the unit test host. Escape it with \w*.
       "Add IPv4 Route: via 192\\.168\\.17\\.254 if \\w*\\[12\\] table 254 "
       "priority 9 protocol BOOT type UNICAST"},
      {kDelRouteIPV6, sizeof(kDelRouteIPV6),
       "Delete IPv6 Route: dst ff02::1:ffa0:688/128 via ff02::1:ffa0:688 if "
       "\\w*\\[2\\] table 254 priority 0 protocol UNSPEC type UNICAST"},
      {kAddNeighborMessage, sizeof(kAddNeighborMessage),
       "Add IPv4 Neighbor: NeighborStatus state 2 flags 0 type 1"},
      {kNdRdnssMessage, sizeof(kNdRdnssMessage),
       "Add IPv6 Rdnss: RdnssOption lifetime -1"},
      {kRuleMessage1, sizeof(kRuleMessage1),
       "Add IPv4 Rule: src 100\\.87\\.84\\.110/24 table 1002 priority 10 "
       "action TO_TBL flags 0"},
      {kRuleMessage2, sizeof(kRuleMessage2),
       "Delete IPv4 Rule: iif eth0 table 1002 priority 10 action TO_TBL flags "
       "0"},
      {kRuleMessage3, sizeof(kRuleMessage3),
       "Add IPv4 Rule: fwmark 0x1234/0xFFFF table 1002 priority 8 action "
       "TO_TBL flags 0"},
      {kRuleMessage4, sizeof(kRuleMessage4),
       "Add IPv6 Rule: table 255 priority 0 action TO_TBL flags 0"},
  };
  for (const auto& tt : test_cases) {
    RTNLMessage msg;
    EXPECT_TRUE(msg.Decode(ByteString(tt.payload, tt.length)));
    EXPECT_TRUE(std::regex_match(msg.ToString(), std::regex(tt.regexp)))
        << '"' << msg.ToString() << "\" did not match regex \"" << tt.regexp
        << '"';
  }
}

TEST_F(RTNLMessageTest, GetUint32Attribute) {
  // Attribute not found
  RTNLMessage msg;
  EXPECT_EQ(0, msg.GetUint32Attribute(4));

  // Attribute found
  msg.SetAttribute(5, ByteString::CreateFromCPUUInt32(1234));
  EXPECT_EQ(1234, msg.GetUint32Attribute(5));
}

TEST_F(RTNLMessageTest, GetStringAttribute) {
  const char* attr = "attribute";

  // Attribute not found
  RTNLMessage msg;
  EXPECT_EQ("", msg.GetStringAttribute(4));

  // Valid c string attribute found
  msg.SetAttribute(5, ByteString(attr, strlen(attr) + 1));
  EXPECT_EQ("attribute", msg.GetStringAttribute(5));

  // Non null-terminated c string attribute found
  msg.SetAttribute(6, ByteString(attr, 3));
  EXPECT_EQ("att", msg.GetStringAttribute(6));

  // Non null-terminated c string attribute found
  msg.SetAttribute(7, ByteString(attr, 1));
  EXPECT_EQ("a", msg.GetStringAttribute(7));

  // Non text attribute
  const unsigned char not_text[] = {0xff, 0xff, 0xff, 0xff};
  msg.SetAttribute(8, ByteString(not_text, 4));
  EXPECT_EQ("\xff\xff\xff\xff", msg.GetStringAttribute(8));
}

TEST_F(RTNLMessageTest, EncodeGetMessageLength) {
  // The message length of kModeGet should be correct: when there is no
  // attribute, it should be a nlmsg header plus a specific struct for the given
  // RTNL message type.
  RTNLMessage msg_link(RTNLMessage::kTypeLink, RTNLMessage::kModeGet, 0, 0, 0,
                       0, IPAddress::kFamilyIPv4);
  EXPECT_EQ(NLMSG_LENGTH(sizeof(struct ifinfomsg)),
            msg_link.Encode().GetLength());

  RTNLMessage msg_address(RTNLMessage::kTypeAddress, RTNLMessage::kModeGet, 0,
                          0, 0, 0, IPAddress::kFamilyIPv4);
  EXPECT_EQ(NLMSG_LENGTH(sizeof(struct ifaddrmsg)),
            msg_address.Encode().GetLength());

  RTNLMessage msg_route(RTNLMessage::kTypeRoute, RTNLMessage::kModeGet, 0, 0, 0,
                        0, IPAddress::kFamilyIPv4);
  EXPECT_EQ(NLMSG_LENGTH(sizeof(struct rtmsg)), msg_route.Encode().GetLength());

  RTNLMessage msg_rule(RTNLMessage::kTypeRule, RTNLMessage::kModeGet, 0, 0, 0,
                       0, IPAddress::kFamilyIPv4);
  EXPECT_EQ(NLMSG_LENGTH(sizeof(struct rtmsg)), msg_rule.Encode().GetLength());

  RTNLMessage msg_neighor(RTNLMessage::kTypeNeighbor, RTNLMessage::kModeGet, 0,
                          0, 0, 0, IPAddress::kFamilyIPv4);
  EXPECT_EQ(NLMSG_LENGTH(sizeof(struct ndmsg)),
            msg_neighor.Encode().GetLength());
}

}  // namespace shill
