>> + if (greinfo[IFLA_GRE_ERSPAN_INDEX]) >> + erspan_idx = >> rta_getattr_u32(greinfo[IFLA_GRE_ERSPAN_INDEX]); >> } > > Are you missing a ntohl() here?
> > It is encoded as htonl() when sending to kernel. > > addattr32(n, 1024, IFLA_GRE_FWMARK, fwmark); > + addattr32(n, 1024, IFLA_GRE_ERSPAN_INDEX, htonl(erspan_idx)); Thanks for the feedbacks, and sorry for my late response. Now I plan to not translate to network-byte order, but do it inside the kernel. So kernel expects host order, ip route only sends host-byte order. > > Is erspan_idx == 0 a reserved value? ERSPAN spec does not say erspan_idx = 0 should be reserved or not. But I assume at lease people will put some value, so I assume it is reserved. And only when it is non-zero, then send to kernel. > You should only send erspan_idx to kernel if it is given on command line. Yes, I will resubmit next patch. Regards, William