add "/mask"
diff --git a/extensions/ebt_mark_m.c b/extensions/ebt_mark_m.c
index 16caec5..5029738 100644
--- a/extensions/ebt_mark_m.c
+++ b/extensions/ebt_mark_m.c
@@ -18,7 +18,7 @@
 {
 	printf(
 "mark option:\n"
-"--mark    [!] value[/mask]: Match nfmask value with optional mask\n");
+"--mark    [!] [value][/mask]: Match nfmask value (see man page)\n");
 }
 
 static void init(struct ebt_entry_match *match)
@@ -28,6 +28,7 @@
 	markinfo->mark = 0;
 	markinfo->mask = 0;
 	markinfo->invert = 0;
+	markinfo->bitmask = 0;
 }
 
 #define OPT_MARK 0x01
@@ -46,9 +47,12 @@
 		if (optind > argc)
 			print_error("No mark specified");
 		markinfo->mark = strtoul(argv[optind - 1], &end, 0);
-		if (*end == '/')
+		markinfo->bitmask = EBT_MARK_AND;
+		if (*end == '/') {
+			if (end == argv[optind - 1])
+				markinfo->bitmask = EBT_MARK_OR;
 			markinfo->mask = strtoul(end+1, &end, 0);
-		else
+		} else
 			markinfo->mask = 0xffffffff;
 		if ( *end != '\0' || end == argv[optind - 1])
 			print_error("Bad mark value '%s'", argv[optind - 1]);
@@ -74,7 +78,9 @@
 	printf("--mark ");
 	if (markinfo->invert)
 		printf("! ");
-	if(markinfo->mask != 0xffffffff)
+	if (markinfo->bitmask == EBT_MARK_OR)
+		printf("/0x%lx ", markinfo->mask);
+	else if(markinfo->mask != 0xffffffff)
 		printf("0x%lx/0x%lx ", markinfo->mark, markinfo->mask);
 	else
 		printf("0x%lx ", markinfo->mark);
@@ -92,6 +98,8 @@
 		return 0;
 	if (markinfo1->mask != markinfo2->mask)
 		return 0;
+	if (markinfo1->bitmask != markinfo2->bitmask)
+		return 0;
 	return 1;
 }