#include <stdio.h>
typedef unsigned int uint_t;
typedef enum VD_L2_FLAGS_tag
{
VD_L2_DISCARD_SRC = 0x1,
VD_L2_DISCARD_DST = 0x2,
VD_L2_STATIC = 0x10,
VD_L2_TRUNK_MEMBER = 0x20,
VD_L2_ROUTER_NH = 0x800,
VD_FLAGS_MAX
}VD_L2_FLAGS;
#define RTK_L2_UCAST_FLAG_TRUNK_PORT 0x00000001
#define RTK_L2_UCAST_FLAG_SA_BLOCK 0x00000002
#define RTK_L2_UCAST_FLAG_DA_BLOCK 0x00000004
#define RTK_L2_UCAST_FLAG_STATIC 0x00000008
#define RTK_L2_UCAST_FLAG_NEXTHOP 0x00000010
int main () {
uint_t flags_int, flags_out;
flags_out = 0;
flags_int = (VD_L2_DISCARD_SRC | VD_L2_DISCARD_DST | VD_L2_STATIC);
printf("---- No.1 flags_out: %x -----\n", flags_out);
if(flags_int & VD_L2_TRUNK_MEMBER)
{
flags_out |= RTK_L2_UCAST_FLAG_TRUNK_PORT;
}
printf("---- No.2 flags_out: %x -----\n", flags_out);
if(flags_int & VD_L2_STATIC)
{
flags_out |= RTK_L2_UCAST_FLAG_STATIC;
if(flags_int & VD_L2_ROUTER_NH)
{
flags_out |= RTK_L2_UCAST_FLAG_NEXTHOP;
}
}
printf("---- No.3 flags_out: %x -----\n", flags_out);
if(flags_int & VD_L2_DISCARD_SRC)
{
flags_out |= RTK_L2_UCAST_FLAG_SA_BLOCK;
}
printf("---- No.4 flags_out: %x -----\n", flags_out);
if(flags_int & VD_L2_DISCARD_DST)
{
flags_out |= RTK_L2_UCAST_FLAG_DA_BLOCK;
}
printf("---- No.5 flags_out: %x -----\n", flags_out);
return 0;
}