bool force_log;
        int pass_cnt;
        int error_cnt;
+       int skip_cnt;
        bool tested;
 
        const char *subtest_name;
        fseeko(stdout, 0, SEEK_SET); /* rewind */
 }
 
+static void skip_account(void)
+{
+       if (env.test->skip_cnt) {
+               env.skip_cnt++;
+               env.test->skip_cnt = 0;
+       }
+}
+
 void test__end_subtest()
 {
        struct prog_test_def *test = env.test;
                env.fail_cnt++;
        else
                env.sub_succ_cnt++;
+       skip_account();
 
        dump_test_log(test, sub_error_cnt);
 
        env.test->force_log = true;
 }
 
+void test__skip(void)
+{
+       env.test->skip_cnt++;
+}
+
 struct ipv4_packet pkt_v4 = {
        .eth.h_proto = __bpf_constant_htons(ETH_P_IP),
        .iph.ihl = 5,
                        env.fail_cnt++;
                else
                        env.succ_cnt++;
+               skip_account();
 
                dump_test_log(test, test->error_cnt);
 
                        test->error_cnt ? "FAIL" : "OK");
        }
        stdio_restore();
-       printf("Summary: %d/%d PASSED, %d FAILED\n",
-              env.succ_cnt, env.sub_succ_cnt, env.fail_cnt);
+       printf("Summary: %d/%d PASSED, %d SKIPPED, %d FAILED\n",
+              env.succ_cnt, env.sub_succ_cnt, env.skip_cnt, env.fail_cnt);
 
        free(env.test_selector.num_set);
        free(env.subtest_selector.num_set);
 
        int succ_cnt; /* successful tests */
        int sub_succ_cnt; /* successful sub-tests */
        int fail_cnt; /* total failed tests + sub-tests */
+       int skip_cnt; /* skipped tests */
 };
 
 extern int error_cnt;
 
 extern void test__force_log();
 extern bool test__start_subtest(const char *name);
+extern void test__skip(void);
 
 #define MAGIC_BYTES 123