Mailing List Archive

r207 - in trunk/varnish-cache: bin/varnishd include lib/libvcl
Author: phk
Date: 2006-06-20 11:15:39 +0200 (Tue, 20 Jun 2006)
New Revision: 207

Added:
trunk/varnish-cache/bin/varnishd/cache_vrt.c
trunk/varnish-cache/include/vrt.h
Modified:
trunk/varnish-cache/bin/varnishd/Makefile.am
trunk/varnish-cache/bin/varnishd/cache_vcl.c
trunk/varnish-cache/include/vcl_lang.h
trunk/varnish-cache/lib/libvcl/vcl_compile.c
trunk/varnish-cache/lib/libvcl/vcl_fixed_token.c
trunk/varnish-cache/lib/libvcl/vcl_gen_fixed_token.tcl
Log:

Start putting some structure in the sources relating to VCL handling:

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.



Modified: trunk/varnish-cache/bin/varnishd/Makefile.am
===================================================================
--- trunk/varnish-cache/bin/varnishd/Makefile.am 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/bin/varnishd/Makefile.am 2006-06-20 09:15:39 UTC (rev 207)
@@ -15,6 +15,7 @@
cache_pipe.c \
cache_shmlog.c \
cache_vcl.c \
+ cache_vrt.c \
cli_event.c \
hash_simple_list.c \
mgt_child.c \

Modified: trunk/varnish-cache/bin/varnishd/cache_vcl.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_vcl.c 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/bin/varnishd/cache_vcl.c 2006-06-20 09:15:39 UTC (rev 207)
@@ -190,24 +190,6 @@

/*--------------------------------------------------------------------*/

-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(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);
-}

Added: trunk/varnish-cache/bin/varnishd/cache_vrt.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_vrt.c 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/bin/varnishd/cache_vrt.c 2006-06-20 09:15:39 UTC (rev 207)
@@ -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);
+}

Modified: trunk/varnish-cache/include/vcl_lang.h
===================================================================
--- trunk/varnish-cache/include/vcl_lang.h 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/include/vcl_lang.h 2006-06-20 09:15:39 UTC (rev 207)
@@ -11,18 +11,6 @@
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,18 +79,11 @@
#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 *);
+#endif

-char *VCL_GetHdr(VCL_FARGS, const char *);
-char *VCL_GetReq(VCL_FARGS);
-
typedef void vcl_init_f(void);
typedef void vcl_func_f(VCL_FARGS);

@@ -115,14 +96,7 @@
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)

Added: trunk/varnish-cache/include/vrt.h
===================================================================
--- trunk/varnish-cache/include/vrt.h 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/include/vrt.h 2006-06-20 09:15:39 UTC (rev 207)
@@ -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)

Modified: trunk/varnish-cache/lib/libvcl/vcl_compile.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcl_compile.c 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/lib/libvcl/vcl_compile.c 2006-06-20 09:15:39 UTC (rev 207)
@@ -122,7 +122,7 @@


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 @@

#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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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");
}


Modified: trunk/varnish-cache/lib/libvcl/vcl_fixed_token.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcl_fixed_token.c 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/lib/libvcl/vcl_fixed_token.c 2006-06-20 09:15:39 UTC (rev 207)
@@ -410,18 +410,6 @@
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,18 +478,11 @@
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("#endif\n", f);
fputs("\n", f);
- fputs("char *VCL_GetHdr(VCL_FARGS, const char *);\n", f);
- fputs("char *VCL_GetReq(VCL_FARGS);\n", f);
- fputs("\n", f);
fputs("typedef void vcl_init_f(void);\n", f);
fputs("typedef void vcl_func_f(VCL_FARGS);\n", f);
fputs("\n", f);
@@ -514,12 +495,45 @@
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("#define VCL_done(sess, hand) \\\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 VRT_done(sess, hand) \\\n", f);
fputs(" do { \\\n", f);
fputs(" sess->handling = hand; \\\n", f);
fputs(" sess->done = 1; \\\n", f);

Modified: trunk/varnish-cache/lib/libvcl/vcl_gen_fixed_token.tcl
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcl_gen_fixed_token.tcl 2006-06-18 10:28:11 UTC (rev 206)
+++ trunk/varnish-cache/lib/libvcl/vcl_gen_fixed_token.tcl 2006-06-20 09:15:39 UTC (rev 207)
@@ -176,28 +176,37 @@
}
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