On 11/30/12 at 11:00pm, Cong Wang wrote: > I don't understand this. nla_put_flag() is used to put a flag (only one > bit set) into a netlink message, so why should we use it to put > p->port_no here? And why port_no 0 matters here? nla_put_flag() will simply add a netlink attribute with no payload, i.e. just the header. Assuming that port_no == 0 is invalid the port_no can be used as attribute id as both are 16bit integers. It will look like this: MDBA_ROUTERS = { { .nla_len = 4, .nla_type = <port_no_1>, }, { .nla_len = 4, .nla_type = <port_no_2>, } [...] } If you ever need to extend this you can just add payload to the per port attribute and nothing will break. > So I should use net->dev_base_seq + mdb->seq ? No you can't, mdb->seq is not stable throughout a dump. What you can do is save mdb->seq in cb->args[] and in case you continue dumping from the same mdb in the next call to your dump function you check if it changed and bump cb->seq if it did to trigger an interrupt.