ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/util.h
(Generate patch)

Comparing gvpe/src/util.h (file contents):
Revision 1.3 by pcg, Fri Mar 21 23:17:01 2003 UTC vs.
Revision 1.10 by pcg, Thu Oct 16 14:12:00 2003 UTC

1/* 1/*
2 util.h -- process management and other utility functions 2 util.h -- process management and other utility functions
3 Copyright (C) 1998-2002 Ivo Timmermans <ivo@o2w.nl> 3 Copyright (C) 1998-2002 Ivo Timmermans <ivo@o2w.nl>
4 2000-2002 Guus Sliepen <guus@sliepen.eu.org> 4 2000-2002 Guus Sliepen <guus@sliepen.eu.org>
5 2003 Marc Lehmannn <pcg@goof.com> 5 2003 Marc Lehmann <pcg@goof.com>
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
20*/ 20*/
21 21
22#ifndef UTIL_H__ 22#ifndef UTIL_H__
23#define UTIL_H__ 23#define UTIL_H__
24 24
25#include <sys/socket.h> 25#include "gettext.h"
26#include <netinet/in.h>
27 26
28#include <map> 27#include "slog.h"
29
30#include "iom.h" 28#include "iom.h"
31#include "device.h"
32
33#define SOCKADDR sockaddr_in // this is lame, I know
34 29
35/* 30/*
36 * check for an existing vped for this net, and write pid to pidfile 31 * check for an existing vped for this net, and write pid to pidfile
37 */ 32 */
38extern int write_pidfile (void); 33extern int write_pidfile (void);
55/* 50/*
56 * check wether the given path is an absolute pathname 51 * check wether the given path is an absolute pathname
57 */ 52 */
58#define ABSOLUTE_PATH(c) ((c)[0] == '/') 53#define ABSOLUTE_PATH(c) ((c)[0] == '/')
59 54
60static inline void 55typedef u8 mac[6];
61id2mac (unsigned int id, void *m)
62{
63 mac &p = *(mac *)m;
64 56
65 p[0] = 0xfe; 57extern void id2mac (unsigned int id, void *m);
66 p[1] = 0xfd;
67 p[2] = 0x80;
68 p[3] = 0x00;
69 p[4] = id >> 8;
70 p[5] = id;
71}
72 58
73#define mac2id(p) (p[0] & 0x01 ? 0 : (p[4] << 8) | p[5]) 59#define mac2id(p) ((p)[0] & 0x01 ? 0 : ((p)[4] << 8) | (p)[5])
74
75struct sockinfo
76 {
77 u32 host;
78 u16 port;
79
80 void set (const SOCKADDR *sa)
81 {
82 host = sa->sin_addr.s_addr;
83 port = sa->sin_port;
84 }
85
86 sockinfo()
87 {
88 host = port = 0;
89 }
90
91 sockinfo(const SOCKADDR &sa)
92 {
93 set (&sa);
94 }
95
96 sockinfo(const SOCKADDR *sa)
97 {
98 set (sa);
99 }
100
101 SOCKADDR *sa()
102 {
103 static SOCKADDR sa;
104
105 sa.sin_family = AF_INET;
106 sa.sin_port = port;
107 sa.sin_addr.s_addr = host;
108
109 return &sa;
110 }
111
112 operator const char *();
113 };
114
115inline bool
116operator == (const sockinfo &a, const sockinfo &b)
117{
118 return a.host == b.host && a.port == b.port;
119}
120
121inline bool
122operator < (const sockinfo &a, const sockinfo &b)
123{
124 return a.host < b.host
125 || (a.host == b.host && a.port < b.port);
126}
127 60
128struct sliding_window { 61struct sliding_window {
129 u32 v[(WINDOWSIZE + 31) / 32]; 62 u32 v[(WINDOWSIZE + 31) / 32];
130 u32 seq; 63 u32 seq;
131 64
158 91
159 u32 s = seqno % WINDOWSIZE; 92 u32 s = seqno % WINDOWSIZE;
160 u32 *cell = v + (s >> 5); 93 u32 *cell = v + (s >> 5);
161 u32 mask = 1 << (s & 31); 94 u32 mask = 1 << (s & 31);
162 95
163 //printf ("received seqno %08lx, seq %08lx, mask %08lx is %08lx\n", seqno, seq, mask, ismask);
164 if (*cell & mask) 96 if (*cell & mask)
165 { 97 {
166 slog (L_ERR, _("received duplicate packet (received %08lx, expected %08lx)\n" 98 slog (L_ERR, _("received duplicate packet (received %08lx, expected %08lx)\n"
167 "possible replay attack, or just packet duplication"), seqno, seq + 1);//D 99 "possible replay attack, or just packet duplication"), seqno, seq + 1);//D
168 return false; 100 return false;
174 } 106 }
175 } 107 }
176 } 108 }
177}; 109};
178 110
111typedef callback0<const char *> run_script_cb;
112
113// run a shell script (or actually an external program).
114void run_script (const run_script_cb &cb, bool wait);
115
116#if ENABLE_HTTP_PROXY
117u8 *base64_encode (const u8 *data, unsigned int len);
179#endif 118#endif
180 119
120#endif
121

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines