Used IPv6 pattern from nftables project to match valid only IPv6
address to do not mess with MAC or other syntax patterns with ':' symbol.

Signed-off-by: Vadim Kochan <vadi...@gmail.com>
---
 trafgen_lexer.l  | 51 +++++++++++++++++++++++++++++++++++++++++++++++----
 trafgen_parser.y |  2 +-
 2 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/trafgen_lexer.l b/trafgen_lexer.l
index 025fbfe..ad9dfe7 100644
--- a/trafgen_lexer.l
+++ b/trafgen_lexer.l
@@ -77,13 +77,56 @@ number_bin  ([0]?[b][0-1]+)
 number_dec     (([0])|([1-9][0-9]*))
 number_ascii   ([a-zA-Z])
 
+hex4           ([[:xdigit:]]{1,4})
+v680           (({hex4}:){7}{hex4})
+v670           ((:)((:{hex4}){7}))
+v671           ((({hex4}:){1})((:{hex4}){6}))
+v672           ((({hex4}:){2})((:{hex4}){5}))
+v673           ((({hex4}:){3})((:{hex4}){4}))
+v674           ((({hex4}:){4})((:{hex4}){3}))
+v675           ((({hex4}:){5})((:{hex4}){2}))
+v676           ((({hex4}:){6})(:{hex4}{1}))
+v677           ((({hex4}:){7})(:))
+v67            ({v670}|{v671}|{v672}|{v673}|{v674}|{v675}|{v676}|{v677})
+v660           ((:)((:{hex4}){6}))
+v661           ((({hex4}:){1})((:{hex4}){5}))
+v662           ((({hex4}:){2})((:{hex4}){4}))
+v663           ((({hex4}:){3})((:{hex4}){3}))
+v664           ((({hex4}:){4})((:{hex4}){2}))
+v665           ((({hex4}:){5})((:{hex4}){1}))
+v666           ((({hex4}:){6})(:))
+v66            ({v660}|{v661}|{v662}|{v663}|{v664}|{v665}|{v666})
+v650           ((:)((:{hex4}){5}))
+v651           ((({hex4}:){1})((:{hex4}){4}))
+v652           ((({hex4}:){2})((:{hex4}){3}))
+v653           ((({hex4}:){3})((:{hex4}){2}))
+v654           ((({hex4}:){4})(:{hex4}{1}))
+v655           ((({hex4}:){5})(:))
+v65            ({v650}|{v651}|{v652}|{v653}|{v654}|{v655})
+v640           ((:)((:{hex4}){4}))
+v641           ((({hex4}:){1})((:{hex4}){3}))
+v642           ((({hex4}:){2})((:{hex4}){2}))
+v643           ((({hex4}:){3})((:{hex4}){1}))
+v644           ((({hex4}:){4})(:))
+v64            ({v640}|{v641}|{v642}|{v643}|{v644})
+v630           ((:)((:{hex4}){3}))
+v631           ((({hex4}:){1})((:{hex4}){2}))
+v632           ((({hex4}:){2})((:{hex4}){1}))
+v633           ((({hex4}:){3})(:))
+v63            ({v630}|{v631}|{v632}|{v633})
+v620           ((:)((:{hex4}){2}))
+v621           ((({hex4}:){1})((:{hex4}){1}))
+v622           ((({hex4}:){2})(:))
+v62            ({v620}|{v621}|{v622})
+v610           ((:)(:{hex4}{1}))
+v611           ((({hex4}:){1})(:))
+v61            ({v610}|{v611})
+v60            (::)
+
 a_hex          ([a-fA-F0-9]+)
 mac            ({a_hex}:{a_hex}:{a_hex}:{a_hex}:{a_hex}:{a_hex})
 ip4_addr       ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
-       /* We're very permissive about IPv6 addresses the grammar accepts, as
-        * they can come in various different formats. In any case,
-        * inet_pton(AF_INET6, ...) will reject the invalid ones later on. */
-ip6_addr       
(({a_hex}?:)?({a_hex}?:)?({a_hex}?:)?({a_hex}?:)?({a_hex}?:)?({a_hex}?:)?({a_hex}?:)?({a_hex})?)
+ip6_addr       ({v680}|{v67}|{v66}|{v65}|{v64}|{v63}|{v62}|{v61}|{v60})
 
 %%
 
diff --git a/trafgen_parser.y b/trafgen_parser.y
index bfeed2e..a1b8b0c 100644
--- a/trafgen_parser.y
+++ b/trafgen_parser.y
@@ -416,7 +416,7 @@ static void proto_field_expr_eval(void)
                else if (field->len == 4)
                        proto_hdr_field_set_be32(hdr, field->id, 
field_expr.val.number);
                else
-                       bug();
+                       proto_hdr_field_set_bytes(hdr, field->id, 
field_expr.val.bytes);
                break;
 
        case FIELD_EXPR_MAC:
-- 
2.10.2

-- 
You received this message because you are subscribed to the Google Groups 
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to netsniff-ng+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to