+++ /dev/null
-/*
- * lib/route/nexthop.c Routing Nexthop
- *
- * 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) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup route
- * @defgroup nexthop Nexthop
- * @brief
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/route/rtnl.h>
-#include <netlink/route/route.h>
-
-/** @cond SKIP */
-#define NEXTHOP_HAS_FLAGS 0x000001
-#define NEXTHOP_HAS_WEIGHT 0x000002
-#define NEXTHOP_HAS_IFINDEX 0x000004
-#define NEXTHOP_HAS_GATEWAY 0x000008
-/** @endcond */
-
-/**
- * @name Nexthop Allocation/Freeage
- * @{
- */
-
-/**
- * Allocate a routing nexthop.
- * @return Newly allocated routing nexthop object.
- */
-struct rtnl_nexthop *rtnl_route_nh_alloc(void)
-{
- struct rtnl_nexthop *nh;
-
- nh = calloc(1, sizeof(*nh));
- if (!nh) {
- nl_errno(ENOMEM);
- return NULL;
- }
-
- nl_init_list_head(&nh->rtnh_list);
-
- return nh;
-}
-
-/**
- * Free a routing nexthop.
- * @arg nh Routing nexthop to be freed.
- */
-void rtnl_route_nh_free(struct rtnl_nexthop *nh)
-{
- nl_addr_put(nh->rtnh_gateway);
- free(nh);
-}
-
-/** @} */
-/**
- * @name Attribute: Weight
- */
-
-/**
- * Set weight of routing nexthop.
- * @arg nh Routing nexthop.
- * @arg weight New weight value.
- */
-void rtnl_route_nh_set_weight(struct rtnl_nexthop *nh, int weight)
-{
- nh->rtnh_weight = weight;
- nh->rtnh_mask |= NEXTHOP_HAS_WEIGHT;
-}
-
-/**
- * Get weight of routing nexthop.
- * @arg nh Routing nexthop.
- * @return Weight value or 0 if not available.
- */
-int rtnl_route_nh_get_weight(struct rtnl_nexthop *nh)
-{
- if (nh->rtnh_mask & NEXTHOP_HAS_WEIGHT)
- return nh->rtnh_weight;
- else
- return 0;
-}
-
-/** @} */
-/**
- * @name Attribute: Interface Index
- * @{
- */
-
-/**
- * Set interface index for outgoing interface of routing nexthop.
- * @arg nh Routing nexthop.
- * @arg ifindex New interface index.
- */
-void rtnl_route_nh_set_ifindex(struct rtnl_nexthop *nh, int ifindex)
-{
- nh->rtnh_ifindex = ifindex;
- nh->rtnh_mask |= NEXTHOP_HAS_IFINDEX;
-}
-
-/**
- * Get interface index of outgoing index of routing nexthop.
- * @arg nh Routing nexthop.
- * @return Interface index or -1 if not available.
- */
-int rtnl_route_nh_get_ifindex(struct rtnl_nexthop *nh)
-{
- if (nh->rtnh_mask & NEXTHOP_HAS_IFINDEX)
- return nh->rtnh_ifindex;
- else
- return -1;
-}
-
-/** @} */
-/**
- * @name Attribute: Gateway Address
- * @{
- */
-
-/**
- * Set gateway address of routing nexthop.
- * @arg nh Routing nexthop.
- * @arg addr New gateway address.
- *
- * An eventual existing gateway address will be freed and a
- * reference is acquried of the new address.
- */
-void rtnl_route_nh_set_gateway(struct rtnl_nexthop *nh, struct nl_addr *addr)
-{
- struct nl_addr *old = nh->rtnh_gateway;
-
- nh->rtnh_gateway = nl_addr_get(addr);
- if (old)
- nl_addr_put(old);
-
- nh->rtnh_mask |= NEXTHOP_HAS_GATEWAY;
-}
-
-/**
- * Get gateway address of routing nexthop.
- * @arg nh Routing nexthop.
- * @return Gateway address or NULL if not available.
- */
-struct nl_addr *rtnl_route_nh_get_gateway(struct rtnl_nexthop *nh)
-{
- if (nh->rtnh_mask & NEXTHOP_HAS_GATEWAY)
- return nh->rtnh_gateway;
- else
- return NULL;
-}
-
-/** @} */
-/**
- * @name Attribute: Flags
- * @{
- */
-
-/**
- * Set flags of routing nexthop.
- * @arg nh Routing nexthop.
- * @arg flags Flags to be set.
- */
-void rtnl_route_nh_set_flags(struct rtnl_nexthop *nh, unsigned int flags)
-{
- nh->rtnh_flag_mask |= flags;
- nh->rtnh_flags |= flags;
- nh->rtnh_mask |= NEXTHOP_HAS_FLAGS;
-}
-
-/**
- * Unset flags of routing nexthop.
- * @arg nh Routing nexthop.
- * @arg flags Flags to be unset.
- */
-void rtnl_route_nh_unset_flags(struct rtnl_nexthop *nh, unsigned int flags)
-{
- nh->rtnh_flag_mask |= flags;
- nh->rtnh_flags &= ~flags;
- nh->rtnh_mask |= NEXTHOP_HAS_FLAGS;
-}
-
-/**
- * Get flags of routing nexthop.
- * @arg nh Routing nexthop.
- * @return Flags or 0 if not available.
- */
-unsigned int rtnl_route_nh_get_flags(struct rtnl_nexthop *nh)
-{
- if (nh->rtnh_mask & NEXTHOP_HAS_FLAGS)
- return nh->rtnh_flags;
- else
- return 0;
-}
-
-/** @} */
-/** @} */