Layer 4 DataScripts

Overview

Starting with Avi Vantage release 18.2.3, DataScript support for inspecting L4 headers and performing load balancing, persistence, logging, and more based on the header data has been provided.

The DataScript scripting language is built upon an embedded Lua interpreter, with additional Avi-specific libraries added to extend the power.  The basic DataScript syntax is based on Lua, with additional commands, called functions, available for Avi-specific tasks.  For in-depth help on Lua scripting syntax and usage, see www.lua.org

DataScripts are executed within the data plane on the Avi Service Engines hosting the virtual service to which the DataScript has been attached. DataScript is different than ControlScript, which is a Python-based scripting tool for automation of the control plane and executed from the Avi Controller.

A DataScript will typically be in some form of if/then logic, similar to a policy’s match/action logic.

Events

In Avi Vantage release 18.2.3, the DataScripts service for two events:

  • VS_DATASCRIPT_EVT_L4_REQUEST
  • VS_DATASCRIPT_EVT_L4_RESPONSE

First packet from the client will be subjected to the DataScript with event VS_DATASCRIPT_EVT_L4_REQUEST . Subsequent packets from the client in the same flow will be forwarded to the same server using load balancing mechanism to the same server and not subject to DataScript.

In Avi Vantage release 18.2.3, only the APIs avi.vs.table* and avi.vs.log are supported for VS_DATASCRIPT_EVT_L4_RESPONSE event. avi.vs.table* is applicable only in Avi Vantage release 18.2.3.

Notes:

  • Early access support to layer 4 DataScripts is provided in Avi Vantage release 18.2.3. This version should be used in non-production environments only.
  • Layer 4 DataScripts are production-ready and available for deployment starting with Avi Vantage release 18.2.5.

Layer 4 DataScript Functions

The following layer 4 DataScript functions are available:

String Description
avi.l4.read() Read the payload from the socket buffer
avi.l4.collect() Gather the num_bytes before subjecting the payload to the DataScript.
avi.vs.log() Log the passed message to the connection log
avi.vs.close_conn() Close the current TCP/UDP connection
avi.vs.client_port() Return the client's source port
avi.vs.client_ip() Return the string containing the client’s source ip
avi.vs.persist() Creates peristence entry using the key used after load balancing traffic
avi.vs.table_insert() Store the value in a key-value store for the key
avi.vs.table_remove() Remove a specified key-value pair from the data store for the specified key
avi.vs.table_lookup() Look up a key and return the corresponding value
avi.vs.table_refresh() Refresh the lifetime of the entry for the key in the key/value store
avi.pool.get_server_status() Determine the status of the server listening at a specified port
avi.pool.select() Selects a pool or a specific server within a pool for the current request.

Note: The aforementioned APIs are not supported for IP groups, and string groups. Starting with Avi Vantage release 18.2.5, the DataScripts are supported for pool groups.