diff --git a/src/vnet/l2/l2_fib.h b/src/vnet/l2/l2_fib.h
index 50fd474..a958023 100644
--- a/src/vnet/l2/l2_fib.h
+++ b/src/vnet/l2/l2_fib.h
@@ -102,24 +102,44 @@
   };
 } l2fib_seq_num_t;
 
+/**
+ * Flags associated with an L2 Fib Entry
+ *   - static mac, no MAC move
+ *   - not subject to age
+ *   - mac is for a bridged virtual interface
+ *   - drop packets to/from this mac
+ *   - MAC learned to be sent in L2 MAC event
+ *   -MAC learned is a MAC move
+ */
+#define foreach_l2fib_entry_result_attr       \
+  _(STATIC,  0, "static")                     \
+  _(AGE_NOT, 1, "age-not")                    \
+  _(BVI,     2, "bvi")                        \
+  _(FILTER,  3, "filter")                     \
+  _(LRN_EVT, 4, "learn-event")                \
+  _(LRN_MOV, 5, "learn-move")
+
+typedef enum l2fib_entry_result_flags_t_
+{
+  L2FIB_ENTRY_RESULT_FLAG_NONE = 0,
+#define _(a,v,s) L2FIB_ENTRY_RESULT_FLAG_##a = (1 << v),
+  foreach_l2fib_entry_result_attr
+#undef _
+} __attribute__ ((packed)) l2fib_entry_result_flags_t;
+
+STATIC_ASSERT_SIZEOF (l2fib_entry_result_flags_t, 1);
+
 /*
  * The l2fib entry results
  */
-typedef struct
+typedef struct l2fib_entry_result_t_
 {
   union
   {
     struct
     {
       u32 sw_if_index;		/* output sw_if_index (L3 intf if bvi==1) */
-
-      u8 static_mac:1;		/* static mac, no MAC move */
-      u8 age_not:1;		/* not subject to age */
-      u8 bvi:1;			/* mac is for a bridged virtual interface */
-      u8 filter:1;		/* drop packets to/from this mac */
-      u8 lrn_evt:1;		/* MAC learned to be sent in L2 MAC event */
-      u8 lrn_mov:1;		/* MAC learned is a MAC move */
-      u8 unused:2;
+      l2fib_entry_result_flags_t flags;
 
       u8 timestamp;		/* timestamp for aging */
       l2fib_seq_num_t sn;	/* bd/int seq num */
@@ -130,6 +150,41 @@
 
 STATIC_ASSERT_SIZEOF (l2fib_entry_result_t, 8);
 
+#define _(a,v,s)                                                        \
+  always_inline int                                                     \
+  l2fib_entry_result_is_set_##a (const l2fib_entry_result_t *r) {       \
+    return (r->fields.flags & L2FIB_ENTRY_RESULT_FLAG_##a);             \
+  }
+foreach_l2fib_entry_result_attr
+#undef _
+#define _(a,v,s)                                                        \
+  always_inline void                                                    \
+  l2fib_entry_result_set_##a (l2fib_entry_result_t *r) {       \
+    r->fields.flags |= L2FIB_ENTRY_RESULT_FLAG_##a;             \
+  }
+  foreach_l2fib_entry_result_attr
+#undef _
+#define _(a,v,s)                                                        \
+  always_inline void                                                    \
+  l2fib_entry_result_clear_##a (l2fib_entry_result_t *r) {       \
+    r->fields.flags &= ~L2FIB_ENTRY_RESULT_FLAG_##a;             \
+  }
+  foreach_l2fib_entry_result_attr
+#undef _
+  static inline void
+l2fib_entry_result_set_bits (l2fib_entry_result_t * r,
+			     l2fib_entry_result_flags_t bits)
+{
+  r->fields.flags |= bits;
+}
+
+static inline void
+l2fib_entry_result_clear_bits (l2fib_entry_result_t * r,
+			       l2fib_entry_result_flags_t bits)
+{
+  r->fields.flags &= ~bits;
+}
+
 /* L2 MAC event entry action enums (see mac_entry definition in l2.api) */
 typedef enum
 {
@@ -387,19 +442,14 @@
 void
 l2fib_add_entry (u8 * mac,
 		 u32 bd_index,
-		 u32 sw_if_index, u8 static_mac, u8 drop_mac, u8 bvi_mac);
-
-static inline void
-l2fib_add_fwd_entry (u8 * mac, u32 bd_index, u32 sw_if_index, u8 static_mac,
-		     u8 bvi_mac)
-{
-  l2fib_add_entry (mac, bd_index, sw_if_index, static_mac, 0, bvi_mac);
-}
+		 u32 sw_if_index, l2fib_entry_result_flags_t flags);
 
 static inline void
 l2fib_add_filter_entry (u8 * mac, u32 bd_index)
 {
-  l2fib_add_entry (mac, bd_index, ~0, 1, 1, 0);
+  l2fib_add_entry (mac, bd_index, ~0,
+		   (L2FIB_ENTRY_RESULT_FLAG_FILTER |
+		    L2FIB_ENTRY_RESULT_FLAG_STATIC));
 }
 
 u32 l2fib_del_entry (u8 * mac, u32 bd_index, u32 sw_if_index);
