libnl/lib/idiag/idiag_vegasinfo_obj.c
Joe Damato 81d2b1d509 Add support for inet diag Netlink protocol.
- Inet diag allows users to gather low-level socket information.
- This library provides a higher-level API for creating inetdiag requests (via
  idiagnl_connect and idiagnl_send_simple) and parsing the replies (via
  idiagnl_msg_parse). A cache is also provided (via idiagnl_msg_alloc_cache).
- Request and message objects provide APIs for accessing and setting the
  various properties of each.
- This library also allows the user to parse the inetdiag response attributes
  which contain information about traffic class, TOS, congestion, socket
  memory info, and more depending on the kernel version used.
- Includes doxygen documentation.
2013-07-19 02:06:21 -07:00

104 lines
2.4 KiB
C

/*
* lib/idiag/idiagnl_vegasinfo_obj.c Inet Diag TCP Vegas Info Object
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation version 2.1
* of the License.
*
* Copyright (c) 2013 Sassano Systems LLC <joe@sassanosystems.com>
*/
#include <netlink-private/netlink.h>
#include <netlink/idiag/vegasinfo.h>
/**
* @ingroup idiag
* @defgroup idiagnl_vegasinfo Inet Diag TCP Vegas Info
*
* @details
* @idiagnl_doc{idiagnl_vegasinfo, Inet Diag TCP Vegas Info Documentation}
* @{
*/
struct idiagnl_vegasinfo *idiagnl_vegasinfo_alloc(void)
{
return (struct idiagnl_vegasinfo *) nl_object_alloc(&idiagnl_vegasinfo_obj_ops);
}
void idiagnl_vegasinfo_get(struct idiagnl_vegasinfo *vinfo)
{
nl_object_get((struct nl_object *) vinfo);
}
void idiagnl_vegasinfo_put(struct idiagnl_vegasinfo *vinfo)
{
nl_object_put((struct nl_object *) vinfo);
}
/**
* @name Attributes
* @{
*/
uint32_t idiagnl_vegasinfo_get_enabled(const struct idiagnl_vegasinfo *vinfo)
{
return vinfo->tcpv_enabled;
}
void idiagnl_vegasinfo_set_enabled(struct idiagnl_vegasinfo *vinfo, uint32_t
enabled)
{
vinfo->tcpv_enabled = enabled;
}
uint32_t idiagnl_vegasinfo_get_rttcnt(const struct idiagnl_vegasinfo *vinfo)
{
return vinfo->tcpv_rttcnt;
}
void idiagnl_vegasinfo_set_rttcnt(struct idiagnl_vegasinfo *vinfo, uint32_t
rttcnt)
{
vinfo->tcpv_rttcnt = rttcnt;
}
uint32_t idiagnl_vegasinfo_get_rtt(const struct idiagnl_vegasinfo *vinfo)
{
return vinfo->tcpv_rtt;
}
void idiagnl_vegasinfo_set_rtt(struct idiagnl_vegasinfo *vinfo, uint32_t rtt)
{
vinfo->tcpv_rtt = rtt;
}
uint32_t idiagnl_vegasinfo_get_minrtt(const struct idiagnl_vegasinfo *vinfo)
{
return vinfo->tcpv_minrtt;
}
void idiagnl_vegasinfo_set_minrtt(struct idiagnl_vegasinfo *vinfo, uint32_t
minrtt)
{
vinfo->tcpv_minrtt = minrtt;
}
/** @} */
static int idiagnl_vegasinfo_clone(struct nl_object *_dst,
struct nl_object *_src)
{
struct idiagnl_vegasinfo *dst = (struct idiagnl_vegasinfo *) _dst;
struct idiagnl_vegasinfo *src = (struct idiagnl_vegasinfo *) _src;
memcpy(dst, src, sizeof(struct idiagnl_vegasinfo));
return 0;
}
/** @cond SKIP */
struct nl_object_ops idiagnl_vegasinfo_obj_ops = {
.oo_name = "idiag/idiag_vegasinfo",
.oo_size = sizeof(struct idiagnl_vegasinfo),
.oo_clone = idiagnl_vegasinfo_clone,
};
/** @endcond */
/** @} */