mirror of
				https://gitlab.labs.nic.cz/labs/bird.git
				synced 2024-05-11 16:54:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *	Filters: utility functions
 | 
						|
 *
 | 
						|
 *	Copyright 1998 Pavel Machek <pavel@ucw.cz>
 | 
						|
 *
 | 
						|
 *	Can be freely distributed and used under the terms of the GNU GPL.
 | 
						|
 */
 | 
						|
 | 
						|
#include "nest/bird.h"
 | 
						|
#include "conf/conf.h"
 | 
						|
#include "filter/filter.h"
 | 
						|
 | 
						|
#define P(a,b) ((a<<8) | b)
 | 
						|
 | 
						|
struct f_inst *
 | 
						|
f_new_inst(void)
 | 
						|
{
 | 
						|
  struct f_inst * ret;
 | 
						|
  ret = cfg_alloc(sizeof(struct f_inst));
 | 
						|
  ret->code = ret->aux = 0;
 | 
						|
  ret->arg1 = ret->arg2 = ret->next = NULL;
 | 
						|
  ret->lineno = conf_lino;
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
struct f_inst *
 | 
						|
f_new_dynamic_attr(int type, int f_type, int code)
 | 
						|
{
 | 
						|
  struct f_inst *f = f_new_inst();
 | 
						|
  f->aux = type;
 | 
						|
  f->a2.i = code;
 | 
						|
  return f;
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * Generate set_dynamic( operation( get_dynamic(), argument ) )
 | 
						|
 */
 | 
						|
struct f_inst *
 | 
						|
f_generate_complex(int operation, int operation_aux, struct f_inst *dyn, struct f_inst *argument)
 | 
						|
{
 | 
						|
  struct f_inst *set_dyn = f_new_inst(),
 | 
						|
                *oper = f_new_inst(),
 | 
						|
                *get_dyn = dyn;
 | 
						|
 | 
						|
  *set_dyn = *get_dyn;
 | 
						|
  get_dyn->code = P('e','a');
 | 
						|
  oper->code = operation;
 | 
						|
  oper->aux = operation_aux;
 | 
						|
  oper->a1.p = get_dyn;
 | 
						|
  oper->a2.p = argument;
 | 
						|
  set_dyn->code = P('e','S');
 | 
						|
  set_dyn->a1.p = oper;
 | 
						|
  return set_dyn;
 | 
						|
}
 | 
						|
 | 
						|
char *
 | 
						|
filter_name(struct filter *filter)
 | 
						|
{
 | 
						|
  if (!filter)
 | 
						|
    return "ACCEPT";
 | 
						|
  else if (filter == FILTER_REJECT)
 | 
						|
    return "REJECT";
 | 
						|
  else
 | 
						|
    return filter->name;
 | 
						|
}
 |