]> git.ipfire.org Git - thirdparty/bird.git/log
thirdparty/bird.git
26 years agoCreated new functions for allocating configuration data:
Martin Mares [Sun, 29 Nov 1998 21:59:37 +0000 (21:59 +0000)] 
Created new functions for allocating configuration data:

   o  cfg_alloc(size) -- generic memory allocation
   o  cfg_allocu(size) -- unaligned memory allocation
   o  cfg_allocz(size) -- zeroed memory allocation
   o  cfg_strcpy(str) -- allocate a copy of a string

Also fixed a bug in lexing of string literals.

26 years ago`wc -l TODO` decreased.
Martin Mares [Sun, 29 Nov 1998 14:51:47 +0000 (14:51 +0000)] 
`wc -l TODO` decreased.

26 years agoAdded function for shell-like pattern matching. Will be used for
Martin Mares [Sun, 29 Nov 1998 14:47:24 +0000 (14:47 +0000)] 
Added function for shell-like pattern matching. Will be used for
matching interface names in protocol-to-iface bindings.

26 years agoAllow setting debug value and `disabled' flag in protocol definition.
Martin Mares [Sun, 29 Nov 1998 14:40:39 +0000 (14:40 +0000)] 
Allow setting debug value and `disabled' flag in protocol definition.

26 years agoRenamed `DEBUG' symbol to `DEBUGGING' to prevent collisions with token
Martin Mares [Sun, 29 Nov 1998 14:38:34 +0000 (14:38 +0000)] 
Renamed `DEBUG' symbol to `DEBUGGING' to prevent collisions with token
names and include files.

26 years agoOops, forgot to remove a debugging kludge.
Martin Mares [Fri, 27 Nov 1998 21:34:03 +0000 (21:34 +0000)] 
Oops, forgot to remove a debugging kludge.

26 years agoTrivial 15-line bison excercise: Implemented expressions including
Martin Mares [Fri, 27 Nov 1998 21:32:45 +0000 (21:32 +0000)] 
Trivial 15-line bison excercise: Implemented expressions including
user-defined numeric symbols. Whenever possible, use `expr' instead
of `NUM' to get full express ion power :-)

26 years agoFirst attempt at protocol configuration (now done only for RIP).
Martin Mares [Fri, 27 Nov 1998 21:09:57 +0000 (21:09 +0000)] 
First attempt at protocol configuration (now done only for RIP).

26 years agoFixed few misspellings and exported instance init as rip_init_instance().
Martin Mares [Fri, 27 Nov 1998 21:08:37 +0000 (21:08 +0000)] 
Fixed few misspellings and exported instance init as rip_init_instance().

26 years agoAdded generator of default names.
Martin Mares [Fri, 27 Nov 1998 21:07:02 +0000 (21:07 +0000)] 
Added generator of default names.

26 years agoExperimental config file.
Martin Mares [Fri, 27 Nov 1998 19:39:16 +0000 (19:39 +0000)] 
Experimental config file.

26 years agoDummy grammar for RIP configuration. Now empty, but must be here since
Martin Mares [Fri, 27 Nov 1998 19:38:30 +0000 (19:38 +0000)] 
Dummy grammar for RIP configuration. Now empty, but must be here since
it's referenced in the makefiles.

26 years agoParser fragment for the core. Now handles only router ID setting.
Martin Mares [Fri, 27 Nov 1998 19:37:57 +0000 (19:37 +0000)] 
Parser fragment for the core. Now handles only router ID setting.

26 years agoCompile and use the new configuration code by default.
Martin Mares [Fri, 27 Nov 1998 19:37:07 +0000 (19:37 +0000)] 
Compile and use the new configuration code by default.

26 years agoBase of the parser.
Martin Mares [Fri, 27 Nov 1998 19:36:06 +0000 (19:36 +0000)] 
Base of the parser.

26 years agoLexical analyser.
Martin Mares [Fri, 27 Nov 1998 19:35:50 +0000 (19:35 +0000)] 
Lexical analyser.

26 years agoReplaced nest/confile.h by conf/conf.h, added a lot of new definitions.
Martin Mares [Fri, 27 Nov 1998 19:35:10 +0000 (19:35 +0000)] 
Replaced nest/confile.h by conf/conf.h, added a lot of new definitions.

26 years agoThis script takes configuration fragments and generates full Bison grammar
Martin Mares [Fri, 27 Nov 1998 19:33:53 +0000 (19:33 +0000)] 
This script takes configuration fragments and generates full Bison grammar
from them.

26 years agoThis script takes configuration fragments and extracts keyword list
Martin Mares [Fri, 27 Nov 1998 19:33:26 +0000 (19:33 +0000)] 
This script takes configuration fragments and extracts keyword list
from them.

26 years agoNow merges configuration fragments (*.Y) as well.
Martin Mares [Fri, 27 Nov 1998 19:31:41 +0000 (19:31 +0000)] 
Now merges configuration fragments (*.Y) as well.

26 years agoImplemented ip_pton()
Martin Mares [Fri, 27 Nov 1998 19:29:27 +0000 (19:29 +0000)] 
Implemented ip_pton()

26 years agoRemoved prototype of rp_free() since this function has never existed.
Martin Mares [Fri, 27 Nov 1998 19:29:00 +0000 (19:29 +0000)] 
Removed prototype of rp_free() since this function has never existed.

26 years agoAdded path to config file.
Martin Mares [Fri, 27 Nov 1998 19:28:29 +0000 (19:28 +0000)] 
Added path to config file.

26 years agoKilled bug in processing of 'h' prefix. Patch taken from linux-2.1.129.
Martin Mares [Sat, 21 Nov 1998 10:25:34 +0000 (10:25 +0000)] 
Killed bug in processing of 'h' prefix. Patch taken from linux-2.1.129.

26 years agoComplain loudly if the logging buffer would overflow.
Martin Mares [Mon, 16 Nov 1998 21:41:21 +0000 (21:41 +0000)] 
Complain loudly if the logging buffer would overflow.

26 years agoImplemented snprintf and similar functions. It took a lot of thinking,
Martin Mares [Mon, 16 Nov 1998 21:40:35 +0000 (21:40 +0000)] 
Implemented snprintf and similar functions. It took a lot of thinking,
but the modifications were relatively simple and straightforward.

26 years agoRIP now includes notion of interface, and is correctly talking to
Pavel Machek [Mon, 26 Oct 1998 15:35:19 +0000 (15:35 +0000)] 
RIP now includes notion of interface, and is correctly talking to
itself on second host. Split horizont is broken.

26 years agoPrevious fix was wrong.
Martin Mares [Mon, 26 Oct 1998 15:24:32 +0000 (15:24 +0000)] 
Previous fix was wrong.

26 years agorte_update: Doesn't loop forever when multiple routes point to the same
Martin Mares [Mon, 26 Oct 1998 15:01:04 +0000 (15:01 +0000)] 
rte_update: Doesn't loop forever when multiple routes point to the same
destination.

26 years agoRIP _NOW_ actually talks to itself (workaround core bug: send data
Pavel Machek [Tue, 20 Oct 1998 16:45:53 +0000 (16:45 +0000)] 
RIP _NOW_ actually talks to itself (workaround core bug: send data
from other port than we receive at), few FIXME's added.

26 years agoLearn static device routes from the kernel (temporary until we can make
Martin Mares [Tue, 20 Oct 1998 16:39:04 +0000 (16:39 +0000)] 
Learn static device routes from the kernel (temporary until we can make
such things configurable).

26 years agoRIP now actually talks to itself.
Pavel Machek [Tue, 20 Oct 1998 16:12:43 +0000 (16:12 +0000)] 
RIP now actually talks to itself.

26 years agoBeware the NULL route, my son... The bugs that bite, the BIRDs that crash :-)
Martin Mares [Tue, 20 Oct 1998 15:47:02 +0000 (15:47 +0000)] 
Beware the NULL route, my son... The bugs that bite, the BIRDs that crash :-)

26 years agoInsert/remove hooks return void, not int.
Martin Mares [Tue, 20 Oct 1998 15:17:38 +0000 (15:17 +0000)] 
Insert/remove hooks return void, not int.

26 years agoAdded pointer to network to RTE. The complications with passing NET separately
Martin Mares [Tue, 20 Oct 1998 15:13:18 +0000 (15:13 +0000)] 
Added pointer to network to RTE. The complications with passing NET separately
aren't worth 4 bytes per RTE.

rte_discard and rte_dump don't need net * as parameter.

26 years agoUpdated TODO.
Martin Mares [Mon, 19 Oct 1998 18:18:12 +0000 (18:18 +0000)] 
Updated TODO.

26 years agoGenerate router_id automatically if possible (standard "smallest of local
Martin Mares [Mon, 19 Oct 1998 18:13:36 +0000 (18:13 +0000)] 
Generate router_id automatically if possible (standard "smallest of local
regular interface addresses" rule).

Protocols should NOT rely on router_id existence -- when router ID is not
available, the router_id variable is set to zero and protocols requiring
valid router ID should just refuse to start, reporting such error to the log.

26 years agoBasic kernel routing table syncing implemented. Learning of routes installed
Martin Mares [Mon, 19 Oct 1998 17:52:29 +0000 (17:52 +0000)] 
Basic kernel routing table syncing implemented. Learning of routes installed
by other programs or the kernel itself is not supported yet, but it's not
needed for development of other protocols.

26 years agoUse (SOCK_DGRAM,IPPROTO_IP) socket instead of (SOCK_STREAM,IPPROTO_TCP).
Martin Mares [Mon, 19 Oct 1998 17:48:45 +0000 (17:48 +0000)] 
Use (SOCK_DGRAM,IPPROTO_IP) socket instead of (SOCK_STREAM,IPPROTO_TCP).
This is exactly what Linux ifconfig does and seems to be the preferred way.

26 years agoExporting fill_in_sockaddr() for use by other unix-dependent code.
Martin Mares [Mon, 19 Oct 1998 17:47:50 +0000 (17:47 +0000)] 
Exporting fill_in_sockaddr() for use by other unix-dependent code.

26 years agoFixed generation of device routes for unnumbered point-to-point links.
Martin Mares [Mon, 19 Oct 1998 17:46:45 +0000 (17:46 +0000)] 
Fixed generation of device routes for unnumbered point-to-point links.

26 years agoProto struct now contain (down | starting | up) state.
Martin Mares [Mon, 19 Oct 1998 17:45:29 +0000 (17:45 +0000)] 
Proto struct now contain (down | starting | up) state.

26 years agoWe parse /proc/net/route and flag RT entries according to it. More to come
Martin Mares [Sun, 18 Oct 1998 22:25:56 +0000 (22:25 +0000)] 
We parse /proc/net/route and flag RT entries according to it. More to come
today in the morning...

26 years agoo FIB flags now available for FIB users.
Martin Mares [Sun, 18 Oct 1998 22:24:41 +0000 (22:24 +0000)] 
o  FIB flags now available for FIB users.
o  struct network: FIB flags used for kernel syncing.
o  struct network: `next' field deleted (historical relic).

26 years agoAdded ipa_from_u32 and ipa_from_u32 for use in the kernel sync code (IPv4 only).
Martin Mares [Sun, 18 Oct 1998 22:22:28 +0000 (22:22 +0000)] 
Added ipa_from_u32 and ipa_from_u32 for use in the kernel sync code (IPv4 only).
Don't ever think of using it in routing protocols.

26 years agoSince almost every UNIX system requires different techniques for reading
Martin Mares [Sun, 18 Oct 1998 12:50:43 +0000 (12:50 +0000)] 
Since almost every UNIX system requires different techniques for reading
the kernel routing table as opposed to modifying it which is approximately
the same on non-netlink systems, I've split the kernel routing table
routines to read and write parts. To be implemented later ;-)

26 years ago* Please distinguish between DGB() and debug().
Martin Mares [Sun, 18 Oct 1998 12:48:15 +0000 (12:48 +0000)] 
* Please distinguish between DGB() and debug().

26 years agoPreconfig, postconfig and init hooks can be NULL.
Martin Mares [Sun, 18 Oct 1998 12:26:02 +0000 (12:26 +0000)] 
Preconfig, postconfig and init hooks can be NULL.

26 years agoSplit protocol init to building of protocol list and real protocol init.
Martin Mares [Sun, 18 Oct 1998 11:53:21 +0000 (11:53 +0000)] 
Split protocol init to building of protocol list and real protocol init.
Added kernel route table syncer skeleton.

26 years agoRemoved global pointer to proto_dev.
Martin Mares [Sun, 18 Oct 1998 11:50:36 +0000 (11:50 +0000)] 
Removed global pointer to proto_dev.

26 years agoAfter contemplating about RIP route timeouts for a long time, I've implemented
Martin Mares [Sun, 18 Oct 1998 11:13:16 +0000 (11:13 +0000)] 
After contemplating about RIP route timeouts for a long time, I've implemented
protocol callbacks for route insertion and deletion from the central table.
RIP should maintain its own per-protocol queue of existing routes, scan it
periodically and call rte_discard() for routes that have timed out.

26 years agoImplemented `route last modified' time.
Martin Mares [Sun, 18 Oct 1998 10:49:46 +0000 (10:49 +0000)] 
Implemented `route last modified' time.

26 years agoFixed misleading comment.
Martin Mares [Sat, 17 Oct 1998 11:26:28 +0000 (11:26 +0000)] 
Fixed misleading comment.

26 years agoEach protocol now hears even its own routes and needs to make its own
Martin Mares [Sat, 17 Oct 1998 11:24:13 +0000 (11:24 +0000)] 
Each protocol now hears even its own routes and needs to make its own
loop detection. This is needed since both RIP and OSPF handle multiple
neighbors and they need to redistribute routes learned from each neighbor
to the remaining ones.

26 years agoSolve chicken-and-egg problems with protocol startup. We now queue all inactive
Martin Mares [Sat, 17 Oct 1998 11:05:18 +0000 (11:05 +0000)] 
Solve chicken-and-egg problems with protocol startup. We now queue all inactive
protocols and don't send route/interface updates to them and when they come up,
we resend the whole route/interface tables privately.

Removed the "scan interface list after protocol start" work-around.

26 years agoWALK_LIST_DELSAFE now actually works (it really couldn't since it didn't
Martin Mares [Sat, 17 Oct 1998 11:02:39 +0000 (11:02 +0000)] 
WALK_LIST_DELSAFE now actually works (it really couldn't since it didn't
reference list head at all).

26 years agorip should now correctly listen, but entries will not time out.
Pavel Machek [Sat, 17 Oct 1998 10:25:22 +0000 (10:25 +0000)] 
rip should now correctly listen, but entries will not time out.

26 years agoRip: rip_rta_same added.
Pavel Machek [Thu, 15 Oct 1998 15:12:24 +0000 (15:12 +0000)] 
Rip: rip_rta_same added.

26 years agoMoved scanning of interfaces, so that they get initialized after all
Martin Mares [Wed, 14 Oct 1998 13:38:17 +0000 (13:38 +0000)] 
Moved scanning of interfaces, so that they get initialized after all
routing protocol instances.

26 years agoLists: unneccessary test killed, make code friendly to non-gcc.
Pavel Machek [Wed, 14 Oct 1998 13:27:53 +0000 (13:27 +0000)] 
Lists: unneccessary test killed, make code friendly to non-gcc.

26 years agoo There are cases when SIOCGIFINDEX is defined, but it doesn't work. When
Martin Mares [Tue, 13 Oct 1998 19:57:33 +0000 (19:57 +0000)] 
o  There are cases when SIOCGIFINDEX is defined, but it doesn't work. When
   this happens, don't reject the whole interface, just mark it as index 0.
o  Removed Pavel's comment about EFAULT and SIGSEGV. EFAULT is a valid return
   code for cases where the buffer is too small.
o  Commented out the smart interface list size logic temporarily as it seems
   Linux 2.0 SIOCGIFCONF doesn't react to ifc_req==NULL sanely. Replaced it
   by exponential stepping.

26 years agoStrange, on atrey ioctl() does not fill structure, and bird segfaults
Pavel Machek [Tue, 13 Oct 1998 14:59:46 +0000 (14:59 +0000)] 
Strange, on atrey ioctl() does not fill structure, and bird segfaults
on it. Now we "only" die().

26 years agoI prefer to have broken drivers than completely stupid ones...
Pavel Machek [Tue, 13 Oct 1998 14:32:18 +0000 (14:32 +0000)] 
I prefer to have broken drivers than completely stupid ones...

Linus Torvalds

Rip now uses main routing table properly: entries are stored directly
into main routing table and we are relying on core to call our's
compare. That unfortunately broke garbage collecting (and probably
many more things). It compiles.

26 years agoRIP now somehow listens to main routing table (dont expect it to work)
Pavel Machek [Wed, 7 Oct 1998 19:33:50 +0000 (19:33 +0000)] 
RIP now somehow listens to main routing table (dont expect it to work)

27 years agoRoute update hook now gets network prefix as well as updated
Martin Mares [Mon, 31 Aug 1998 21:13:42 +0000 (21:13 +0000)] 
Route update hook now gets network prefix as well as updated
route attributes.

27 years agoBird's info are now understood by ripquery.
Pavel Machek [Thu, 30 Jul 1998 07:43:45 +0000 (07:43 +0000)] 
Bird's info are now understood by ripquery.

27 years agoRip now includes code to reply, but it is currently broken.
Pavel Machek [Tue, 28 Jul 1998 21:44:11 +0000 (21:44 +0000)] 
Rip now includes code to reply, but it is currently broken.

27 years agoDo not segfault on iface == NULL.
Pavel Machek [Tue, 28 Jul 1998 21:42:08 +0000 (21:42 +0000)] 
Do not segfault on iface == NULL.

27 years agoReversed buggy patch.
Pavel Machek [Mon, 20 Jul 1998 20:05:40 +0000 (20:05 +0000)] 
Reversed buggy patch.

27 years agoAdded comment explaining `now'.
Martin Mares [Wed, 15 Jul 1998 19:42:23 +0000 (19:42 +0000)] 
Added comment explaining `now'.

27 years agoRemoved format specification attributes for log() and debug() until
Martin Mares [Fri, 10 Jul 1998 08:39:34 +0000 (08:39 +0000)] 
Removed format specification attributes for log() and debug() until
GCC is fixed to handle custom formats.

27 years agoAdded ipa_class_mask() which guesses netmask for classful addressing.
Martin Mares [Fri, 10 Jul 1998 08:38:29 +0000 (08:38 +0000)] 
Added ipa_class_mask() which guesses netmask for classful addressing.
For pure A/B/C class addresses it just returns the class netmask, for
subnets it tries to guess subnet mask. Please make sure the address
you pass to this function is really a valid host address (i.e., call
ipa_validate() first).

27 years agoReplaced remaining references of clock_t by bird_clock_t.
Martin Mares [Fri, 10 Jul 1998 08:32:18 +0000 (08:32 +0000)] 
Replaced remaining references of clock_t by bird_clock_t.

27 years agoCommiting RIP. RIP should somehow listen, will not reply. I needed to
Pavel Machek [Thu, 9 Jul 1998 19:39:04 +0000 (19:39 +0000)] 
Commiting RIP. RIP should somehow listen, will not reply. I needed to
commit it so that whole thing compiles.

27 years agoMaking SIGUSR1 dump also all protocols.
Pavel Machek [Thu, 9 Jul 1998 19:37:39 +0000 (19:37 +0000)] 
Making SIGUSR1 dump also all protocols.

27 years agoAdding proto_dump_all() function
Pavel Machek [Thu, 9 Jul 1998 19:36:52 +0000 (19:36 +0000)] 
Adding proto_dump_all() function

27 years agoAdding MIN()/MAX() macros
Pavel Machek [Thu, 9 Jul 1998 19:36:05 +0000 (19:36 +0000)] 
Adding MIN()/MAX() macros

27 years agoAdding walk list which permits you to delete entries.
Pavel Machek [Thu, 9 Jul 1998 19:35:23 +0000 (19:35 +0000)] 
Adding walk list which permits you to delete entries.

27 years agoUse '%I' instead of dirty address printing hacks.
Martin Mares [Wed, 17 Jun 1998 14:36:02 +0000 (14:36 +0000)] 
Use '%I' instead of dirty address printing hacks.

27 years agoOops, forgot '%m'...
Martin Mares [Wed, 17 Jun 1998 14:34:13 +0000 (14:34 +0000)] 
Oops, forgot '%m'...

27 years agodebug() and log() use the new printf. Feel free to use new formatting
Martin Mares [Wed, 17 Jun 1998 14:33:29 +0000 (14:33 +0000)] 
debug() and log() use the new printf. Feel free to use new formatting
sequences for all output.

27 years agoAdded local version of sprintf (bsprintf and bvsprintf) offering few new
Martin Mares [Wed, 17 Jun 1998 14:31:36 +0000 (14:31 +0000)] 
Added local version of sprintf (bsprintf and bvsprintf) offering few new
format strings:

%I IP address
%#I IP address in hexadecimal
%1I IP address padded to full length
%m strerror(errno)

27 years agoip_ntop() and ip_ntox() for IPv4.
Martin Mares [Wed, 17 Jun 1998 14:28:46 +0000 (14:28 +0000)] 
ip_ntop() and ip_ntox() for IPv4.

27 years agoAdded function for converting of IP addresses to printable form.
Martin Mares [Wed, 17 Jun 1998 14:26:30 +0000 (14:26 +0000)] 
Added function for converting of IP addresses to printable form.

27 years agoNow sending IF_CHANGE_CREATE when a new interface appears and IF_CHANGE_UP
Martin Mares [Thu, 4 Jun 1998 20:30:11 +0000 (20:30 +0000)] 
Now sending IF_CHANGE_CREATE when a new interface appears and IF_CHANGE_UP
only if it's really up.

27 years agoFIB_WALK and friends are now slightly more friendly.
Martin Mares [Thu, 4 Jun 1998 20:29:44 +0000 (20:29 +0000)] 
FIB_WALK and friends are now slightly more friendly.

27 years agoDumping of _static_ attributes implemented.
Martin Mares [Thu, 4 Jun 1998 20:29:05 +0000 (20:29 +0000)] 
Dumping of _static_ attributes implemented.

27 years agoWe have full interface routes now.
Martin Mares [Thu, 4 Jun 1998 20:28:43 +0000 (20:28 +0000)] 
We have full interface routes now.

27 years agoHandle route deletion without segfaults. A bit more debug dumps.
Martin Mares [Thu, 4 Jun 1998 20:28:19 +0000 (20:28 +0000)] 
Handle route deletion without segfaults. A bit more debug dumps.

27 years agoFixed processing of timers.
Martin Mares [Thu, 4 Jun 1998 20:27:49 +0000 (20:27 +0000)] 
Fixed processing of timers.

27 years agoKilled socket debug code. Initialize config pool and protocols.
Martin Mares [Wed, 3 Jun 1998 08:43:44 +0000 (08:43 +0000)] 
Killed socket debug code. Initialize config pool and protocols.
More to come later...

27 years agoSkeleton of device route protocol. As it's tightly coupled with our kernel,
Martin Mares [Wed, 3 Jun 1998 08:42:16 +0000 (08:42 +0000)] 
Skeleton of device route protocol. As it's tightly coupled with our kernel,
it sits here instead of `proto/dev'.

27 years agoProtocol hooks. All of them may be NULL.
Martin Mares [Wed, 3 Jun 1998 08:40:10 +0000 (08:40 +0000)] 
Protocol hooks. All of them may be NULL.

27 years agoBasic protocol operations.
Martin Mares [Wed, 3 Jun 1998 08:38:53 +0000 (08:38 +0000)] 
Basic protocol operations.

27 years agoChanged protocol declarations a bit.
Martin Mares [Wed, 3 Jun 1998 08:38:06 +0000 (08:38 +0000)] 
Changed protocol declarations a bit.

27 years agoAdded configuration pool.
Martin Mares [Wed, 3 Jun 1998 08:36:34 +0000 (08:36 +0000)] 
Added configuration pool.

27 years agoProtocols will reside in directory `proto'.
Martin Mares [Wed, 3 Jun 1998 08:35:40 +0000 (08:35 +0000)] 
Protocols will reside in directory `proto'.

27 years agoSynced to new interface code.
Martin Mares [Mon, 1 Jun 1998 21:41:32 +0000 (21:41 +0000)] 
Synced to new interface code.

27 years ago- Rewrote whole interface logic. Removed support for multiple addresses per
Martin Mares [Mon, 1 Jun 1998 21:41:11 +0000 (21:41 +0000)] 
- Rewrote whole interface logic. Removed support for multiple addresses per
  interface since it makes much trouble everywhere. Instead, we understand
  secondary addresses as subinterfaces.

- In case interface addresses or basic flags change, we simply convert it
  to a down/up sequence.

- Implemented the universal neighbour cache. (Just forget what did previous
  includes say of neighbour caching, this one is brand new.)

27 years agoAdded ipa_xor() and ipa_in_net().
Martin Mares [Mon, 1 Jun 1998 21:36:58 +0000 (21:36 +0000)] 
Added ipa_xor() and ipa_in_net().