/[pengfork]/pengfork/src/iptunnel/init.c
ViewVC logotype

Diff of /pengfork/src/iptunnel/init.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7 by chupa, Fri Nov 29 15:17:45 2002 UTC revision 1.8 by chupa, Sun Dec 1 01:19:07 2002 UTC
# Line 20  Line 20 
20   *                   *                
21   */   */
22    
23    #include "config.h"
24    
25  #include <sys/types.h>  #include <sys/types.h>
26  #include <sys/socket.h>  #include <sys/socket.h>
27  #include <netinet/in.h>  #include <netinet/in.h>
# Line 27  Line 29 
29  #include <stdlib.h>  #include <stdlib.h>
30  #include <string.h>  #include <string.h>
31    
32    #include "gettext.h"
33  #include "buffer.h"  #include "buffer.h"
34  #include "options.h"  #include "options.h"
35  #include "misc.h"  #include "misc.h"
# Line 66  ip_tunnel_init () Line 69  ip_tunnel_init ()
69  {  {
70    struct ip_config_request request = DEFAULT_IP_CONFIG_REQUEST;    struct ip_config_request request = DEFAULT_IP_CONFIG_REQUEST;
71    
72    fdo_send ( TOKEN ("ya"), (char *) &request, sizeof (request));    fdo_send (TOKEN ("ya"), (char *) &request, sizeof (request));
73    
74    fdo_register ( TOKEN ("ya"), ip_tunnel_config);    fdo_register (TOKEN ("ya"), ip_tunnel_config);
75  }  }
76    
77  int  int
78  ip_tunnel_ready (bufin)  ip_tunnel_ready (bufin)
79       buffer_t *bufin;       buffer_t *bufin;
80  {  {
81    if( (bufin->used == bufin->size) && protocol->ready())    if ((bufin->used == bufin->size) && protocol->ready ())
82      get_ip_client(bufin);      get_ip_client (bufin);
83    return protocol->ready();    return protocol->ready ();
84  }  }
85    
86  void  void
# Line 92  ip_tunnel_config (token, data, data_size Line 95  ip_tunnel_config (token, data, data_size
95    struct in_addr dns;    struct in_addr dns;
96    struct in_addr net;    struct in_addr net;
97    int mask;    int mask;
98    int mtu=1500;    int mtu = 1500;
99    char hostname[255];    char hostname[255];
100    char *domain = NULL;    char *domain = NULL;
101    int len;    int len;
102    int nparsed = 0;    int nparsed = 0;
103    
104    while(nparsed<data_size)    while (nparsed < data_size)
105      {      {
106        cfg_hdr = (struct ip_config_header *) (data + nparsed);        cfg_hdr = (struct ip_config_header *) (data + nparsed);
107        cfg_data = data + nparsed + sizeof(struct ip_config_header);        cfg_data = data + nparsed + sizeof (struct ip_config_header);
108        switch(cfg_hdr->type)        switch (cfg_hdr->type)
109          {          {
110          case TYPE_IP_ADDR:          case TYPE_IP_ADDR:
111          address.s_addr = *((in_addr_t *)cfg_data);            address.s_addr = *((in_addr_t *) cfg_data);
112          log (LOG_INFO, "IP address: %s\n", inet_ntoa(address));            log (LOG_INFO, gettext ("IP address: %s\n"), inet_ntoa (address));
113          break;            break;
114          case TYPE_DNS_ADDR:          case TYPE_DNS_ADDR:
115          dns.s_addr = *((in_addr_t *)cfg_data);            dns.s_addr = *((in_addr_t *) cfg_data);
116          log (LOG_INFO, "DNS server: %s\n", inet_ntoa(dns));            log (LOG_INFO, gettext ("DNS server: %s\n"), inet_ntoa (dns));
117          break;            break;
118          case TYPE_MTU:          case TYPE_MTU:
119          mtu= ntohs(*((u_int16_t *)cfg_data));            mtu = ntohs (*((u_int16_t *) cfg_data));
120          log (LOG_INFO, "MTU: %d\n", mtu);            log (LOG_INFO, gettext ("MTU: %d\n"), mtu);
121          break;            break;
122          case TYPE_HOSTNAME:          case TYPE_HOSTNAME:
123          len = cfg_hdr->length;            len = cfg_hdr->length;
124          if (len > sizeof(hostname))            if (len > sizeof (hostname))
125            len = sizeof(hostname);              len = sizeof (hostname);
126          strncpy (hostname, cfg_data, len);            strncpy (hostname, cfg_data, len);
127          hostname[len] = '\0';            hostname[len] = '\0';
128          domain = strchr(hostname,'.');            domain = strchr (hostname, '.');
129          if(domain) domain++;            if (domain)
130                domain++;
131          log (LOG_INFO, "Hostname: %s\n", hostname);  
132          if(domain)            log (LOG_INFO, gettext ("Hostname: %s\n"), hostname);
133            log (LOG_INFO, "Domain: %s\n", domain);            if (domain)
134          break;              log (LOG_INFO, gettext ("Domain: %s\n"), domain);
135              break;
136          case TYPE_SUBNET:          case TYPE_SUBNET:
137          mask = *((u_int8_t *)cfg_data);            mask = *((u_int8_t *) cfg_data);
138          net.s_addr = 0;            net.s_addr = 0;
139          memcpy(&net.s_addr, cfg_data+1, cfg_hdr->length-1);            memcpy (&net.s_addr, cfg_data + 1, cfg_hdr->length - 1);
140          /* Need 2 instructions because inet_ntoa use a static buffer */            /* Need 2 instructions because inet_ntoa use a static buffer */
141          log (LOG_INFO, "Subnet: %s/", inet_ntoa(net));            debug (1, "Subnet: %s/", inet_ntoa (net));
142          log (LOG_INFO, "%s\n", inet_ntoa(netmask(mask)));            debug (1, "%s\n", inet_ntoa (netmask (mask)));
143          break;            break;
144          }          }
145        nparsed += sizeof(struct ip_config_header) + cfg_hdr->length;        nparsed += sizeof (struct ip_config_header) + cfg_hdr->length;
146      }      }
147    
148    set_dns(domain, dns);    set_dns (domain, dns);
149    launch_ip_up (PARAM_INTERFACE_NAME, address, dns, domain, mtu);    launch_ip_up (PARAM_INTERFACE_NAME, address, dns, domain, mtu);
150    
151    vj_compress_init (&vj_comp, -1);    vj_compress_init (&vj_comp, -1);
152    
153    engine_register (*(iface->fd), 0, ip_tunnel_fn);    engine_register (*(iface->fd), 0, ip_tunnel_fn);
154    
155    fdo_register ( TOKEN ("yc"), get_ip_aol);    fdo_register (TOKEN ("yc"), get_ip_aol);
156  }  }
157    
158  struct in_addr  struct in_addr
159  netmask(bits)  netmask (bits)
160       int bits;       int bits;
161  {  {
162    unsigned long ret=0;    unsigned long ret = 0;
163        
164    ret = ~( ( 1 << (32 - bits) ) - 1 );    ret = ~((1 << (32 - bits)) - 1);
165    
166    return (struct in_addr) { htonl(ret) };    return (struct in_addr)
167      {
168      htonl (ret)};
169  }  }
170    
171  void  void
# Line 168  init_iface (in, out) Line 174  init_iface (in, out)
174       buffer_t *out;       buffer_t *out;
175  {  {
176    ifout = out;    ifout = out;
177    create_buffer(in,2*1500);    create_buffer (in, 2 * 1500);
178    create_buffer(out,2*1500);    create_buffer (out, 2 * 1500);
179  }  }
180    
181  int  int
# Line 178  destroy_iface (in, out) Line 184  destroy_iface (in, out)
184       buffer_t *out;       buffer_t *out;
185  {  {
186    launch_ip_down (PARAM_INTERFACE_NAME);    launch_ip_down (PARAM_INTERFACE_NAME);
187    unset_dns();    unset_dns ();
188    destroy_buffer(in);    destroy_buffer (in);
189    destroy_buffer(out);    destroy_buffer (out);
190    return 1;    return 1;
191  }  }

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26