1/*
2 * Copyright 2006-2010, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Axel D��rfler, axeld@pinc-software.de
7 */
8#ifndef ROUTES_H
9#define ROUTES_H
10
11
12#include <net_datalink.h>
13#include <net_stack.h>
14
15#include <util/DoublyLinkedList.h>
16
17
18struct InterfaceAddress;
19
20
21struct net_route_private
22	: net_route, DoublyLinkedListLinkImpl<net_route_private> {
23	int32	ref_count;
24
25	net_route_private();
26	~net_route_private();
27};
28
29typedef DoublyLinkedList<net_route_private> RouteList;
30typedef DoublyLinkedList<net_route_info,
31	DoublyLinkedListCLink<net_route_info> > RouteInfoList;
32
33
34uint32 route_table_size(struct net_domain_private* domain);
35status_t list_routes(struct net_domain_private* domain, void* buffer,
36				size_t size);
37status_t control_routes(struct net_interface* interface, net_domain* domain,
38				int32 option, void* argument, size_t length);
39
40status_t add_route(struct net_domain* domain,
41				const struct net_route* route);
42status_t remove_route(struct net_domain* domain,
43				const struct net_route* route);
44status_t get_route_information(struct net_domain* domain, void* buffer,
45				size_t length);
46void invalidate_routes(net_domain* domain, net_interface* interface);
47void invalidate_routes(InterfaceAddress* address);
48struct net_route* get_route(struct net_domain* domain,
49				const struct sockaddr* address);
50status_t get_device_route(struct net_domain* domain, uint32 index,
51				struct net_route** _route);
52status_t get_buffer_route(struct net_domain* domain,
53				struct net_buffer* buffer, struct net_route** _route);
54void put_route(struct net_domain* domain, struct net_route* route);
55
56status_t register_route_info(struct net_domain* domain,
57				struct net_route_info* info);
58status_t unregister_route_info(struct net_domain* domain,
59				struct net_route_info* info);
60status_t update_route_info(struct net_domain* domain,
61				struct net_route_info* info);
62
63#endif	// ROUTES_H
64