ipset源代码分析之hash:mac类型集合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haolipengzhanshen/article/details/85084797

想了解ipset的hash:mac类型的实现,要阅读的源代码文件有两个ip_set_hash_mac.c和ip_set_hash_gen.h

一、定义hash元素结构体

/* Member elements */
struct hash_mac4_elem {
    /* Zero valued IP addresses cannot be stored */
    union {
        unsigned char ether[ETH_ALEN];
        __be32 foo[2];
    };
};

如果想设置被哈希成key的元素,可以参考下ip_set_hash_netiface.c

/* IPv4 variant */

struct hash_netiface4_elem_hashed {
    __be32 ip;
    u8 physdev;
    u8 cidr;
    u8 nomatch;
    u8 elem;
};

/* Member elements */
struct hash_netiface4_elem {
    __be32 ip;
    u8 physdev;
    u8 cidr;
    u8 nomatch;
    u8 elem;
    char iface[IFNAMSIZ];
};

由mtype_elem可知,不管是hash_mac4_elem结构体还是hash_netiface4_elem结构体,都是对mtype_elem的扩展

#define mtype_elem        IPSET_TOKEN(MTYPE, _elem)

每种实现ip_set_hash_gen的子类型,可以定义HKEY_DATALEN宏来指定key的长度

如netiface类型的set定义的是

#define HKEY_DATALEN    sizeof(struct hash_netiface4_elem_hashed)

还是实现了hash_netiface4_do_data_match函数

mtype_data_match 先调用了ip_set_match_extensions函数,然后再调用mtype_do_data_match函数。

ip_set_match_extensions函数逐一检查ip_set结构体是否设置了timeout,counter,skbinfo标志。

mtype_test函数检测某一元素是否已经加入集合set中

mtype_data_list何时被调用呢

#define mtype_data_list        IPSET_TOKEN(MTYPE, _data_list)

在使用ipset list显示命令时调用mtype_list函数,mtype_list 函数调用mtype_data_list

ip_set_hash_mac.c源文件最下面代码是填充struct ip_set_type结构体变量hash_mac_type的各个成员,并使用ip_set_type_register函数注册这个结构体,划重点哈,想注册自定义类型的set集合,调用ip_set_type_register函数即可

type->dimension表示有几种维度,比如hash:ip只有一种维度ip,分别去解析不同维度的参数。

比如hash:net,iface就是两个维度,IPSET_DIM_TWO

create回调函数的赋值

#ifdef IP_SET_EMIT_CREATE
static int
IPSET_TOKEN(HTYPE, _create)(struct net *net, struct ip_set *set,
                struct nlattr *tb[], u32 flags)

#endif

使用IPSET_TOKEN宏来构造函数名称,对于ip_set_hash_mac.c来说,

/* Type specific function prefix */
#define HTYPE        hash_mac

所以其函数名为hash_mac_create

create_policy参数(待完成)

adt_policy参数(待完成)

备注:

深入理解rcu机制

undef关键字:取消宏定义的值,一般再宏重新定义之前使用undef关键字

取消

猜你喜欢

转载自blog.csdn.net/haolipengzhanshen/article/details/85084797