]> err.no Git - varnish/commitdiff
Start putting some structure in the sources relating to VCL handling:
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 20 Jun 2006 09:15:39 +0000 (09:15 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 20 Jun 2006 09:15:39 +0000 (09:15 +0000)
Split the runtime support for compiled varnish programs out and give it the
prefix "VRT".

Start using the prefix "VGC" for generated code.

Prefix "VCC" will be for the compiler and "VCL" for calling the compiled and
loaded functions.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@207 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/Makefile.am
varnish-cache/bin/varnishd/cache_vcl.c
varnish-cache/bin/varnishd/cache_vrt.c [new file with mode: 0644]
varnish-cache/include/vcl_lang.h
varnish-cache/include/vrt.h [new file with mode: 0644]
varnish-cache/lib/libvcl/vcl_compile.c
varnish-cache/lib/libvcl/vcl_fixed_token.c
varnish-cache/lib/libvcl/vcl_gen_fixed_token.tcl

index b56b34e9d5707f8a55b527d3b55df79154f20a94..23287109b3e05b08bc5aa001b8281e40e831ff2d 100644 (file)
@@ -15,6 +15,7 @@ varnishd_SOURCES = \
        cache_pipe.c \
        cache_shmlog.c \
        cache_vcl.c \
+       cache_vrt.c \
        cli_event.c \
        hash_simple_list.c \
        mgt_child.c \
index a5ee57b67d7eee088f9fbc5975d576bf9ea22be6..4a5033155fb13590f6544b7a4ad3e38f10e61728 100644 (file)
@@ -190,24 +190,6 @@ cli_func_config_use(struct cli *cli, char **av, void *priv)
 
 /*--------------------------------------------------------------------*/
 
-void
-VCL_error(VCL_FARGS, unsigned err, const char *str)
-{ 
-
-       VSL(SLT_Debug, 0, "VCL_error(%u, %s)", err, str);
-}
-
-void
-VCL_count(struct sess *sp, unsigned u)
-{
-       
-       VSL(SLT_VCL, 0, "%u %d.%d", u,
-           sp->vcl->ref[u].line,
-           sp->vcl->ref[u].pos);
-}
-
-/*--------------------------------------------------------------------*/
-
 static const char *
 HandlingName(unsigned u)
 {
@@ -261,28 +243,3 @@ VCL_method(recv,  HND_Error|HND_Pass|HND_Pipe|HND_Lookup)
 VCL_method(miss,  HND_Error|HND_Pass|HND_Pipe|HND_Fetch)
 VCL_method(hit,          HND_Error|HND_Pass|HND_Pipe|HND_Deliver)
 VCL_method(fetch, HND_Error|HND_Pass|HND_Pipe|HND_Insert)
-
-/*--------------------------------------------------------------------*/
-
-char *
-VCL_GetHdr(VCL_FARGS, const char *n)
-{
-       char *p;
-
-       assert(sess != NULL);
-       assert(sess->http != NULL);
-       if (!http_GetHdr(sess->http, n, &p))
-               return (NULL);
-       return (p);
-}
-
-char *
-VCL_GetReq(VCL_FARGS)
-{
-       char *p;
-
-       assert(sess != NULL);
-       assert(sess->http != NULL);
-       assert(http_GetReq(sess->http, &p));
-       return (p);
-}
diff --git a/varnish-cache/bin/varnishd/cache_vrt.c b/varnish-cache/bin/varnishd/cache_vrt.c
new file mode 100644 (file)
index 0000000..95340f1
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * $Id$
+ *
+ * Runtime support for compiled VCL programs
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <dlfcn.h>
+#include <sys/queue.h>
+
+#include "cli.h"
+#include "cli_priv.h"
+#include "shmlog.h"
+#include "vcl_lang.h"
+#include "vrt.h"
+#include "libvarnish.h"
+#include "cache.h"
+
+/*--------------------------------------------------------------------*/
+
+void
+VRT_error(VCL_FARGS, unsigned err, const char *str)
+{ 
+
+       VSL(SLT_Debug, 0, "VCL_error(%u, %s)", err, str);
+}
+
+/*--------------------------------------------------------------------*/
+
+void
+VRT_count(struct sess *sp, unsigned u)
+{
+       
+       VSL(SLT_VCL, 0, "%u %d.%d", u,
+           sp->vcl->ref[u].line,
+           sp->vcl->ref[u].pos);
+}
+
+/*--------------------------------------------------------------------*/
+
+char *
+VRT_GetHdr(VCL_FARGS, const char *n)
+{
+       char *p;
+
+       assert(sess != NULL);
+       assert(sess->http != NULL);
+       if (!http_GetHdr(sess->http, n, &p))
+               return (NULL);
+       return (p);
+}
+
+/*--------------------------------------------------------------------*/
+
+char *
+VRT_GetReq(VCL_FARGS)
+{
+       char *p;
+
+       assert(sess != NULL);
+       assert(sess->http != NULL);
+       assert(http_GetReq(sess->http, &p));
+       return (p);
+}
index 6c78313883466ddefde5d24fbb0a4c94c3826693..b2790c630d06a0e2d89cb64b72b55bffe273a9bd 100644 (file)
 struct sess;
 typedef void sesscb_f(struct sess *sp);
 
-struct vcl_ref {
-       unsigned        line;
-       unsigned        pos;
-       unsigned        count;
-       const char      *token;
-};
-
-struct vcl_acl {
-       unsigned        ip;
-       unsigned        mask;
-};
-
 #define VCA_ADDRBUFSIZE                32
 
 struct object {        
@@ -91,17 +79,10 @@ struct backend {
 #define VCL_FARGS      struct sess *sess
 #define VCL_PASS_ARGS  sess
 
-void VCL_count(struct sess *, unsigned);
-void VCL_no_cache(VCL_FARGS);
-void VCL_no_new_cache(VCL_FARGS);
+#if 0
 int ip_match(unsigned, struct vcl_acl *);
 int string_match(const char *, const char *);
-int VCL_rewrite(const char *, const char *);
-void VCL_error(VCL_FARGS, unsigned, const char *);
-int VCL_switch_config(const char *);
-
-char *VCL_GetHdr(VCL_FARGS, const char *);
-char *VCL_GetReq(VCL_FARGS);
+#endif
 
 typedef void vcl_init_f(void);
 typedef void vcl_func_f(VCL_FARGS);
@@ -115,14 +96,7 @@ struct VCL_conf {
        vcl_func_f      *miss_func;
        vcl_func_f      *fetch_func;
        struct backend  *default_backend;
-       struct vcl_ref  *ref;
+       struct vrt_ref  *ref;
        unsigned        nref;
        unsigned        busy;
 };
-
-#define VCL_done(sess, hand)                   \
-       do {                                    \
-               sess->handling = hand;          \
-               sess->done = 1;                 \
-               return;                         \
-       } while (0)
diff --git a/varnish-cache/include/vrt.h b/varnish-cache/include/vrt.h
new file mode 100644 (file)
index 0000000..8b97814
--- /dev/null
@@ -0,0 +1,40 @@
+/* $Id$ */
+/*
+ * Runtime support for compiled VCL programs.
+ *
+ * XXX: When this file is changed, lib/libvcl/vcl_gen_fixed_token.tcl
+ * XXX: *MUST* be rerun.
+ */
+
+struct vrt_ref {
+       unsigned        line;
+       unsigned        pos;
+       unsigned        count;
+       const char      *token;
+};
+
+struct vrt_acl {
+       unsigned        ip;
+       unsigned        mask;
+};
+
+void VRT_count(struct sess *, unsigned);
+void VRT_no_cache(VCL_FARGS);
+void VRT_no_new_cache(VCL_FARGS);
+#if 0
+int ip_match(unsigned, struct vcl_acl *);
+int string_match(const char *, const char *);
+#endif
+int VRT_rewrite(const char *, const char *);
+void VRT_error(VCL_FARGS, unsigned, const char *);
+int VRT_switch_config(const char *);
+
+char *VRT_GetHdr(VCL_FARGS, const char *);
+char *VRT_GetReq(VCL_FARGS);
+
+#define VRT_done(sess, hand)                   \
+       do {                                    \
+               sess->handling = hand;          \
+               sess->done = 1;                 \
+               return;                         \
+       } while (0)
index cd6406dcff894de8181b43d72d26633dd92fe601..d5f17aa0157a34dfbe859c6bd26db4795bb47fb7 100644 (file)
@@ -122,7 +122,7 @@ static struct var be_vars[] = {
 
 
 static struct var vars[] = {
-       { "req.request",                STRING,   0,  "VCL_GetReq(VCL_PASS_ARGS)"            },
+       { "req.request",                STRING,   0,  "VRT_GetReq(VCL_PASS_ARGS)"            },
        { "obj.valid",                  BOOL,     0,  "sess->obj->valid"     },
        { "obj.cacheable",              BOOL,     0,  "sess->obj->cacheable" },
        { "req.http.",                  HEADER,   0,  NULL },
@@ -272,7 +272,7 @@ _Expect(struct tokenlist *tl, unsigned tok, int line)
 
 #define C(tl, sep)     do {                            \
        I(tl);                                          \
-       sbuf_printf(tl->fc, "VCL_count(sess, %u)%s\n", ++tl->cnt, sep); \
+       sbuf_printf(tl->fc, "VRT_count(sess, %u)%s\n", ++tl->cnt, sep); \
        tl->t->cnt = tl->cnt;                           \
 } while (0)
        
@@ -567,7 +567,7 @@ HeaderVar(struct tokenlist *tl, struct token *t, struct var *vh)
        p[i] = '\0';
        v->name = p;
        v->fmt = STRING;
-       asprintf(&p, "VCL_GetHdr(VCL_PASS_ARGS, \"%s\")", v->name + vh->len);
+       asprintf(&p, "VRT_GetHdr(VCL_PASS_ARGS, \"%s\")", v->name + vh->len);
        assert(p != NULL);
        v->cname = p;
        return (v);
@@ -921,19 +921,19 @@ Action(struct tokenlist *tl)
                sbuf_printf(tl->fc, "VCL_no_cache(VCL_PASS_ARGS);\n");
                return;
        case T_DELIVER:
-               I(tl); sbuf_printf(tl->fc, "VCL_done(sess, HND_Deliver);\n");
+               I(tl); sbuf_printf(tl->fc, "VRT_done(sess, HND_Deliver);\n");
                return;
        case T_LOOKUP:
-               I(tl); sbuf_printf(tl->fc, "VCL_done(sess, HND_Lookup);\n");
+               I(tl); sbuf_printf(tl->fc, "VRT_done(sess, HND_Lookup);\n");
                return;
        case T_PASS:
-               I(tl); sbuf_printf(tl->fc, "VCL_done(sess, HND_Pass);\n");
+               I(tl); sbuf_printf(tl->fc, "VRT_done(sess, HND_Pass);\n");
                return;
        case T_FETCH:
-               I(tl); sbuf_printf(tl->fc, "VCL_done(sess, HND_Fetch);\n");
+               I(tl); sbuf_printf(tl->fc, "VRT_done(sess, HND_Fetch);\n");
                return;
        case T_INSERT:
-               I(tl); sbuf_printf(tl->fc, "VCL_done(sess, HND_Insert);\n");
+               I(tl); sbuf_printf(tl->fc, "VRT_done(sess, HND_Insert);\n");
                return;
        case T_ERROR:
                if (tl->t->tok == CNUM)
@@ -941,7 +941,7 @@ Action(struct tokenlist *tl)
                else
                        a = 0;
                I(tl);
-               sbuf_printf(tl->fc, "VCL_error(VCL_PASS_ARGS, %u, ", a);
+               sbuf_printf(tl->fc, "VRT_error(VCL_PASS_ARGS, %u, ", a);
                if (tl->t->tok == CSTR) {
                        sbuf_printf(tl->fc, "%*.*s);\n",
                            tl->t->e - tl->t->b,
@@ -949,7 +949,7 @@ Action(struct tokenlist *tl)
                        NextToken(tl);
                } else
                        sbuf_printf(tl->fc, "(const char *)0);\n");
-               I(tl); sbuf_printf(tl->fc, "VCL_done(sess, HND_Error);\n");
+               I(tl); sbuf_printf(tl->fc, "VRT_done(sess, HND_Error);\n");
                return;
        case T_SWITCH_CONFIG:
                ExpectErr(tl, ID);
@@ -1508,11 +1508,11 @@ LocTable(struct tokenlist *tl)
        const char *p;
        
        sbuf_printf(tl->fh,
-           "#define VCL_NREFS %u\n", tl->cnt + 1);
+           "#define VGC_NREFS %u\n", tl->cnt + 1);
        sbuf_printf(tl->fh,
-           "static struct vcl_ref VCL_ref[VCL_NREFS];\n");
+           "static struct vrt_ref VGC_ref[VGC_NREFS];\n");
        sbuf_printf(tl->fc,
-           "static struct vcl_ref VCL_ref[VCL_NREFS] = {\n");
+           "static struct vrt_ref VGC_ref[VGC_NREFS] = {\n");
        lin = 1;
        pos = 0;
        p = tl->b;
@@ -1590,9 +1590,9 @@ EmitStruct(struct tokenlist *tl)
        sbuf_printf(tl->fc,
            "\t.default_backend = &VCL_backend_default,\n");
        sbuf_printf(tl->fc,
-           "\t.ref = VCL_ref,\n");
+           "\t.ref = VGC_ref,\n");
        sbuf_printf(tl->fc,
-           "\t.nref = VCL_NREFS,\n");
+           "\t.nref = VGC_NREFS,\n");
        sbuf_printf(tl->fc, "};\n");
 }
 
index 6e36bae2b44b7ab834d8f95fe01ef55b1e2058d6..fdb2e57c2d5130125cdaad2d53e528448e404221 100644 (file)
@@ -410,18 +410,6 @@ vcl_output_lang_h(FILE *f)
        fputs("struct sess;\n", f);
        fputs("typedef void sesscb_f(struct sess *sp);\n", f);
        fputs("\n", f);
-       fputs("struct vcl_ref {\n", f);
-       fputs(" unsigned        line;\n", f);
-       fputs(" unsigned        pos;\n", f);
-       fputs(" unsigned        count;\n", f);
-       fputs(" const char      *token;\n", f);
-       fputs("};\n", f);
-       fputs("\n", f);
-       fputs("struct vcl_acl {\n", f);
-       fputs(" unsigned        ip;\n", f);
-       fputs(" unsigned        mask;\n", f);
-       fputs("};\n", f);
-       fputs("\n", f);
        fputs("#define VCA_ADDRBUFSIZE          32\n", f);
        fputs("\n", f);
        fputs("struct object {  \n", f);
@@ -490,17 +478,10 @@ vcl_output_lang_h(FILE *f)
        fputs("#define VCL_FARGS        struct sess *sess\n", f);
        fputs("#define VCL_PASS_ARGS    sess\n", f);
        fputs("\n", f);
-       fputs("void VCL_count(struct sess *, unsigned);\n", f);
-       fputs("void VCL_no_cache(VCL_FARGS);\n", f);
-       fputs("void VCL_no_new_cache(VCL_FARGS);\n", f);
+       fputs("#if 0\n", f);
        fputs("int ip_match(unsigned, struct vcl_acl *);\n", f);
        fputs("int string_match(const char *, const char *);\n", f);
-       fputs("int VCL_rewrite(const char *, const char *);\n", f);
-       fputs("void VCL_error(VCL_FARGS, unsigned, const char *);\n", f);
-       fputs("int VCL_switch_config(const char *);\n", f);
-       fputs("\n", f);
-       fputs("char *VCL_GetHdr(VCL_FARGS, const char *);\n", f);
-       fputs("char *VCL_GetReq(VCL_FARGS);\n", f);
+       fputs("#endif\n", f);
        fputs("\n", f);
        fputs("typedef void vcl_init_f(void);\n", f);
        fputs("typedef void vcl_func_f(VCL_FARGS);\n", f);
@@ -514,12 +495,45 @@ vcl_output_lang_h(FILE *f)
        fputs(" vcl_func_f      *miss_func;\n", f);
        fputs(" vcl_func_f      *fetch_func;\n", f);
        fputs(" struct backend  *default_backend;\n", f);
-       fputs(" struct vcl_ref  *ref;\n", f);
+       fputs(" struct vrt_ref  *ref;\n", f);
        fputs(" unsigned        nref;\n", f);
        fputs(" unsigned        busy;\n", f);
        fputs("};\n", f);
+       fputs("/* $Id$ */\n", f);
+       fputs("/*\n", f);
+       fputs(" * Runtime support for compiled VCL programs.\n", f);
+       fputs(" *\n", f);
+       fputs(" * XXX: When this file is changed, lib/libvcl/vcl_gen_fixed_token.tcl\n", f);
+       fputs(" * XXX: *MUST* be rerun.\n", f);
+       fputs(" */\n", f);
+       fputs("\n", f);
+       fputs("struct vrt_ref {\n", f);
+       fputs(" unsigned        line;\n", f);
+       fputs(" unsigned        pos;\n", f);
+       fputs(" unsigned        count;\n", f);
+       fputs(" const char      *token;\n", f);
+       fputs("};\n", f);
+       fputs("\n", f);
+       fputs("struct vrt_acl {\n", f);
+       fputs(" unsigned        ip;\n", f);
+       fputs(" unsigned        mask;\n", f);
+       fputs("};\n", f);
+       fputs("\n", f);
+       fputs("void VRT_count(struct sess *, unsigned);\n", f);
+       fputs("void VRT_no_cache(VCL_FARGS);\n", f);
+       fputs("void VRT_no_new_cache(VCL_FARGS);\n", f);
+       fputs("#if 0\n", f);
+       fputs("int ip_match(unsigned, struct vcl_acl *);\n", f);
+       fputs("int string_match(const char *, const char *);\n", f);
+       fputs("#endif\n", f);
+       fputs("int VRT_rewrite(const char *, const char *);\n", f);
+       fputs("void VRT_error(VCL_FARGS, unsigned, const char *);\n", f);
+       fputs("int VRT_switch_config(const char *);\n", f);
+       fputs("\n", f);
+       fputs("char *VRT_GetHdr(VCL_FARGS, const char *);\n", f);
+       fputs("char *VRT_GetReq(VCL_FARGS);\n", f);
        fputs("\n", f);
-       fputs("#define VCL_done(sess, hand)                     \\\n", f);
+       fputs("#define VRT_done(sess, hand)                     \\\n", f);
        fputs(" do {                                    \\\n", f);
        fputs("         sess->handling = hand;          \\\n", f);
        fputs("         sess->done = 1;                 \\\n", f);
index 85e1b96126c9b2b0c27156082f855118f3fab69e..d345f0e899f2efa101068707a1727c877a88b0cd 100755 (executable)
@@ -176,28 +176,37 @@ foreach i $tokens {
 }
 puts $fo "}"
 
-set fi [open "../../include/vcl_lang.h"]
+
+
+proc copy_include {n} {
+       global fo
+
+       set fi [open $n]
+       while {[gets $fi a] >= 0} {
+               if {"$a" == "#include <http_headers.h>"} {
+                       puts "FOO $a"
+                       set fx [open "../../include/http_headers.h"]
+                       while {[gets $fx b] >= 0} {
+                               regsub -all {"} $b {\"} b
+                               puts $fo "\tfputs(\"$b\\n\", f);"
+                       }
+                       close $fx
+                       continue
+               }
+               regsub -all {\\} $a {\\\\} a
+               puts $fo "\tfputs(\"$a\\n\", f);"
+       }
+       close $fi
+}
 
 puts $fo ""
 puts $fo "void"
 puts $fo "vcl_output_lang_h(FILE *f)"
 puts $fo "{"
-while {[gets $fi a] >= 0} {
-       if {"$a" == "#include <http_headers.h>"} {
-               puts "FOO $a"
-               set fx [open "../../include/http_headers.h"]
-               while {[gets $fx b] >= 0} {
-                       regsub -all {"} $b {\"} b
-                       puts $fo "\tfputs(\"$b\\n\", f);"
-               }
-               close $fx
-               continue
-       }
-       regsub -all {\\} $a {\\\\} a
-       puts $fo "\tfputs(\"$a\\n\", f);"
-}
+copy_include ../../include/vcl_lang.h
+copy_include ../../include/vrt.h
+
 puts $fo "}"
-close $fi
 
 close $foh
 close $fo