- route.c will contain the routing logic.
[tinc] / src / route.c
1 /*
2     route.c -- routing
3     Copyright (C) 2000 Ivo Timmermans <itimmermans@bigfoot.com>,
4                   2000 Guus Sliepen <guus@sliepen.warande.net>
5
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
20     $Id: route.c,v 1.1.2.1 2000/10/23 13:52:54 guus Exp $
21 */
22
23 #include "config.h"
24
25 #include <utils.h>
26 #include <xalloc.h>
27
28 #include "net.h"
29 #include "connlist.h"
30
31 #include "system.h"
32
33 int routing_mode = 0;   /* Will be used to determine if we route by MAC or by payload's protocol */
34
35 conn_list_t *route_packet(vpn_packet_t *packet)
36 {
37   unsigned short type;
38 cp
39   type = ntohs(*((unsigned short*)(&packet.data[12])))
40
41   switch(type)
42     {
43       case 0x0800:
44         return route_ipv4(packet);
45       case 0x86DD:
46         return route_ipv6(packet);
47 /*
48       case 0x8137:
49         return route_ipx(packet);
50       case 0x0806:
51         return route_arp(packet);
52 */
53       default:
54         /* TODO: try MAC as last resort? */
55         if(debug_lvl >= DEBUG_TRAFFIC)
56           {
57             syslog(LOG_WARNING, _("Cannot route packet: unknown type %hx"), type);
58           }
59             return NULL;
60      }
61 }
62
63 conn_list_t *route_ipv4(vpn_packet_t *packet)
64 {
65   ipv4_t dest;
66   conn_list_t *cl;
67 cp
68   dest = ntohl(*((unsigned long*)(&packet.data[30]);
69   
70   cl = lookup_conn_list_ipv4(dest);
71   if(!cl)
72     if(debug_lvl >= DEBUG_TRAFFIC)
73       {
74         syslog(LOG_WARNING, _("Cannot route packet: unknown destination address %d.%d.%d.%d"),
75                packet.data[30], packet.data[31], packet.data[32], packet.data[33]);
76       } 
77   
78   return cl;  
79 cp
80 }
81
82 conn_list_t *route_ipv6(vpn_packet_t *packet)
83 {
84 cp
85   syslog(LOG_WARNING, _("Cannot route packet: IPv6 routing not implemented yet"));
86   return NULL;
87 cp
88 }