-+ name = "BIER"
-+ fields_desc = [ BitField("id", 5, 4),
-+ BitField("version", 0, 4),
-+ BitField("length", 0, 4),
-+ BitField("entropy", 0, 20),
-+ BitField("OAM", 0, 2),
-+ BitField("RSV", 0, 2),
-+ BitField("DSCP", 0, 6),
-+ BitEnumField("Proto", 2, 6, BIERnhcls),
-+ ShortField("BFRID", 0),
-+ StrFixedLenField("BitString",
-+ chr(255)*32, 32) ]
++ name = "BIER"
++ fields_desc = [BitField("id", 5, 4),
++ BitField("version", 0, 4),
++ BitFieldLenField("length", BIERLength.BIER_LEN_256, 4,
++ length_of=lambda x:(x.BitString >> 8)),
++ BitField("entropy", 0, 20),
++ BitField("OAM", 0, 2),
++ BitField("RSV", 0, 2),
++ BitField("DSCP", 0, 6),
++ BitEnumField("Proto", 2, 6, BIERnhcls),
++ ShortField("BFRID", 0),
++ StrLenField("BitString",
++ "",
++ length_from=lambda x:(8 << x.length))]