File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird / nest / locks.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 19:50:23 2021 UTC (3 years, 3 months ago) by misho
Branches: bird, MAIN
CVS tags: v1_6_8p3, HEAD
bird 1.6.8

    1: /*
    2:  *	BIRD Object Locks
    3:  *
    4:  *	(c) 1999 Martin Mares <mj@ucw.cz>
    5:  *
    6:  *	Can be freely distributed and used under the terms of the GNU GPL.
    7:  */
    8: 
    9: #ifndef _BIRD_LOCKS_H_
   10: #define _BIRD_LOCKS_H_
   11: 
   12: #include "lib/resource.h"
   13: #include "lib/event.h"
   14: 
   15: /*
   16:  *  The object locks are used for controlling exclusive access
   17:  *  to various physical resources like UDP ports on specific devices.
   18:  *  When you want to access such resource, you ask for a object lock
   19:  *  structure, fill in specification of the object and your function
   20:  *  you want to have called when the object is available and invoke
   21:  *  olock_acquire() afterwards. When the object becomes free, the lock
   22:  *  manager calls your function. To free the object lock, just call rfree
   23:  *  on its resource.
   24:  */
   25: 
   26: struct object_lock {
   27:   resource r;
   28:   ip_addr addr;		/* Identification of a object: IP address */
   29:   uint type;		/* ... object type (OBJLOCK_xxx) */
   30:   uint port;		/* ... port number */
   31:   uint inst;		/* ... instance ID */
   32:   struct iface *iface;	/* ... interface */
   33:   struct iface *vrf;	/* ... or VRF (if iface is unknown) */
   34:   void (*hook)(struct object_lock *);	/* Called when the lock succeeds */
   35:   void *data;		/* User data */
   36:   /* ... internal to lock manager, don't touch ... */
   37:   node n;		/* Node in list of olocks */
   38:   int state;		/* OLOCK_STATE_xxx */
   39:   list waiters;		/* Locks waiting for the same resource */
   40: };
   41: 
   42: struct object_lock *olock_new(pool *);
   43: void olock_acquire(struct object_lock *);
   44: void olock_init(void);
   45: 
   46: #define OBJLOCK_UDP 1			/* UDP port */
   47: #define OBJLOCK_TCP 2			/* TCP port */
   48: #define OBJLOCK_IP 3			/* IP protocol */
   49: 
   50: #define OLOCK_STATE_FREE 0
   51: #define OLOCK_STATE_LOCKED 1
   52: #define OLOCK_STATE_WAITING 2
   53: #define OLOCK_STATE_EVENT 3		/* waiting for unlock processing */
   54: 
   55: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>