eCLAT documentation

eCLAT client command line

python eclat.py [-h] {load,quit,fetch,fetch-pkg,read-map} ...
  • load: Load an eclat script

  • quit: Close eCLATd

  • fetch: Download all the packages required by an eCLAT script

  • fetch-pkg: Make eCLATd download a specific package

  • read-map: reads a map and displays its content

Examples

python eclat.py load $ECLAT_SCRIPT --define DEVNAME eth0
python eclat.py fetch $ECLAT_SCRIPT
python eclat.py fetch-pkg $MY_PACKAGE
python eclat.py read-map $MY_MAP
python eclat.py read-map $MY_MAP --lookup $MY_KEY

eCLAT instructions

Definition of a variable

u64 : res = 0

Logical conditions

eCLAT supports the logical conditions like Python:

Equals: a == b
Not Equals: a != b
Less than: a < b
Less than or equal to: a <= b
Greater than: a > b
Greater than or equal to: a >= b

If statement

The if statement is the same as in Python:

if var == 1:
    # my comment
    res = 1
elif var == 1:
    res = 2
else:
    res = 0

While statement

The while statement is the same as in Python:

var = 1
while var < 5:
    var = var + 1

eCLAT Data Types

eCLAT data type

eBPF (C) data type

u64

__u64

u32

__u32

u16

__u16

u8

__u8

s64

__s64

s32

__s32

s16

__s16

s8

__s8

eCLAT operators

Unary Operators

Operator

Name

Example

-

Negation

- x

not

Logical NOT

not x

~

Bitwise NOT

~ x

Binary Operators

Operator

Name

Example

+

Addition

x + y

-

Subtraction

x - y

*

Multiplication

x * y

/

Division

x / y

%

Modulus

x % y

<<

Left bit shift (zero fill)

x << y

>>

Right bit shift (zero fill)

x >> y

>=

Greater than or equal

x >= y

<=

Less then or equal

x <= y

>

Greater than

x > y

<

Less than

x < y

==

Equal

x == y

!=

Not equal

x != y

and

Logical AND

x and y

or

Logical OR

x or y

&

Bitwise AND

x & y

|

Bitwise OR

x | y

^

Bitwise XOR

x ^ y

Formal specs of eCLAT language

program : statement_full | statement_full program

statement_full : statement NEWLINE | statement

statement : chain_statement | import_statement | map_statement

import_statement : FROM NAME DOT NAME IMPORT module_list

module_list : NAME COMMA module_list | NAME

map_statement : NAME LSPAR NAME RSPAR ASSIGN kv_mapping

kv_mapping : LCPAR key_value_pairs RCPAR  | LCPAR NEWLINE INDENT key_value_pairs DEDENT NEWLINE RCPAR

key_value_pairs : key_value_pair COMMA key_value_pairs
                | key_value_pair COMMA NEWLINE key_value_pairs
                | key_value_pair NEWLINE
                | key_value_pair | EMPTYLINE

key_value_pair : LPAR exprlist RPAR COLON LPAR exprlist RPAR

chain_statement : DEF NAME LPAR arglist RPAR COLON NEWLINE block

block : INDENT block_statements DEDENT

block_statements: statement_full | statement_full block_statements

statement : PASS
          | expression
          | IF expression COLON NEWLINE block NEWLINE elif_statement
          | IF expression COLON NEWLINE block NEWLINE else_statement
          | IF expression COLON NEWLINE block NEWLINE
          | WHILE expression COLON NEWLINE block
          | RETURN expression
          | RETURN
          | NAME ASSIGN const
          | NAME ASSIGN expression
          | type COLON NAME ASSIGN const
          | type COLON NAME ASSIGN expression

else_statement: ELSE COLON NEWLINE block

elif_statement : ELIF expression COLON NEWLINE block NEWLINE elif_statement
               | ELIF expression COLON NEWLINE block NEWLINE else_statement
               | ELIF expression COLON NEWLINE block NEWLINE

expression : NAME LPAR exprlist RPAR
           | NAME DOT NAME LPAR exprlist RPAR
           | expression PLUS expression
           | expression MINUS expression
           | expression MULT expression
           | expression DIV expression
           | expression MOD expression
           | expression RSHIFT expression
           | expression LSHIFT expression
           | expression GTE expression
           | expression LTE expression
           | expression GT expression
           | expression LT expression
           | expression EQ expression
           | expression NEQ expression
           | expression AND expression
           | expression OR expression
           | expression AMP expression
           | expression PIPE expression
           | expression HAT expression
           | NOT expression
           | MINUS expression
           | TILDE expression
           | LPAR expression RPAR
           | const
           | NAME


exprlist: expression COMMA exprlist | expression

arglist : argument COMMA arglist | argument

argument :  type COLON NAME

type :  U8 | U16 | U32  | U64  | S8 | S16 | S32 | S64

const : HEX  | FLOAT  | INTEGER  | STRING | BOOLEAN