/* *=========================================================================== * ipnet_rtnetlink_route_sz_fill_metrics *=========================================================================== * Description: Fill route metrics as attributes in a NETLINK route message. * Parameters: data - Message buffer * metrics - Pointer to IPNET metrics pointer. * Returns: Length of added attributes * */ IP_GLOBAL int ipnet_rtnetlink_route_sz_fill_metrics(Ipnet_netlink_mem_t *mem, struct Ipnet_rt_metrics *metrics, Ip_u32 mtu) { struct Ip_rtattr *rta; rta = ipnet_rtnetlink_rta_sz_nested_begin(mem, IP_RTA_METRICS); if (!rta) return -1; if (metrics->rmx_mtu > 0) mtu = metrics->rmx_mtu; if (!ipnet_rtnetlink_rta_sz_put(mem, IP_RTAX_MTU, sizeof(Ip_u32), &mtu)) return -1; /* Add Round Trip Time */ if (metrics->rmx_rtt > 0) if (!ipnet_rtnetlink_rta_sz_put(mem, IP_RTAX_RTT, sizeof(Ip_u32), &metrics->rmx_rtt)) return -1; /* Add RTT Variance */ if (metrics->rmx_rttvar > 0) if (!ipnet_rtnetlink_rta_sz_put(mem, IP_RTAX_RTTVAR, sizeof(Ip_u32), &metrics->rmx_rttvar)) return -1; /* Terminate the nested RTA */ ipnet_rtnetlink_rta_sz_nested_end(mem, rta); return 0; }
/* *=========================================================================== * ipnet_rtnetlink_rta_sz_put_u32 *=========================================================================== * Description: * Parameters: * Returns: * */ IP_GLOBAL void * ipnet_rtnetlink_rta_sz_put_u32(Ipnet_netlink_mem_t *mem, int atype, Ip_u32 val) { /* Reinvoke */ return ipnet_rtnetlink_rta_sz_put(mem, atype, sizeof(val), &val); }