コード例 #1
0
/*
 *===========================================================================
 *                   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;
}
コード例 #2
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);
}