summaryrefslogtreecommitdiffstats
path: root/kernel/fs/coda/coda_linux.h
blob: f829fe963f5bab9e1de4b81ec9195de90e5da77d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* 
 * Coda File System, Linux Kernel module
 * 
 * Original version, adapted from cfs_mach.c, (C) Carnegie Mellon University
 * Linux modifications (C) 1996, Peter J. Braam
 * Rewritten for Linux 2.1 (C) 1997 Carnegie Mellon University
 *
 * Carnegie Mellon University encourages users of this software to
 * contribute improvements to the Coda project.
 */

#ifndef _LINUX_CODA_FS
#define _LINUX_CODA_FS

#ifdef pr_fmt
#undef pr_fmt
#endif

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/kernel.h>
#include <linux/param.h>
#include <linux/mm.h>
#include <linux/vmalloc.h>
#include <linux/slab.h>
#include <linux/wait.h>		
#include <linux/types.h>
#include <linux/fs.h>
#include "coda_fs_i.h"

/* operations */
extern const struct inode_operations coda_dir_inode_operations;
extern const struct inode_operations coda_file_inode_operations;
extern const struct inode_operations coda_ioctl_inode_operations;

extern const struct dentry_operations coda_dentry_operations;

extern const struct address_space_operations coda_file_aops;
extern const struct address_space_operations coda_symlink_aops;

extern const struct file_operations coda_dir_operations;
extern const struct file_operations coda_file_operations;
extern const struct file_operations coda_ioctl_operations;

/* operations shared over more than one file */
int coda_open(struct inode *i, struct file *f);
int coda_release(struct inode *i, struct file *f);
int coda_permission(struct inode *inode, int mask);
int coda_revalidate_inode(struct inode *);
int coda_getattr(struct vfsmount *, struct dentry *, struct kstat *);
int coda_setattr(struct dentry *, struct iattr *);

/* this file:  heloers */
char *coda_f2s(struct CodaFid *f);
int coda_iscontrol(const char *name, size_t length);

void coda_vattr_to_iattr(struct inode *, struct coda_vattr *);
void coda_iattr_to_vattr(struct iattr *, struct coda_vattr *);
unsigned short coda_flags_to_cflags(unsigned short);

/* sysctl.h */
void coda_sysctl_init(void);
void coda_sysctl_clean(void);

#define CODA_ALLOC(ptr, cast, size) do { \
    if (size < PAGE_SIZE) \
        ptr = kzalloc((unsigned long) size, GFP_KERNEL); \
    else \
        ptr = (cast)vzalloc((unsigned long) size); \
    if (!ptr) \
	pr_warn("kernel malloc returns 0 at %s:%d\n", __FILE__, __LINE__); \
} while (0)


#define CODA_FREE(ptr,size) \
    do { if (size < PAGE_SIZE) kfree((ptr)); else vfree((ptr)); } while (0)

/* inode to cnode access functions */

static inline struct coda_inode_info *ITOC(struct inode *inode)
{
	return container_of(inode, struct coda_inode_info, vfs_inode);
}

static __inline__ struct CodaFid *coda_i2f(struct inode *inode)
{
	return &(ITOC(inode)->c_fid);
}

static __inline__ char *coda_i2s(struct inode *inode)
{
	return coda_f2s(&(ITOC(inode)->c_fid));
}

/* this will not zap the inode away */
static __inline__ void coda_flag_inode(struct inode *inode, int flag)
{
	struct coda_inode_info *cii = ITOC(inode);

	spin_lock(&cii->c_lock);
	cii->c_flags |= flag;
	spin_unlock(&cii->c_lock);
}		

#endif
Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
# Copyright (c) 2016-2017 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# flow definition for ACL tests - 1K flows - ipv4 only
#
# the number of flows defines the widest range of parameters
# for example if srcip_range=1.0.0.1-1.0.0.255 and dst_ip_range=10.0.0.1-10.0.1.255
# and it should define only 16 flows
#
# there is assumption that packets generated will have a random sequences of following addresses pairs
# in the packets
# 1. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
# 2. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
# ...
# 512. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
#
# not all combination should be filled
# Any other field with random range will be added to flow definition
#
# the example.yaml provides all possibilities for traffic generation
#
# the profile defines a public and private side to make limited traffic correlation
# between private and public side same way as it is made by IXIA solution.
#
---
schema: "nsb:traffic_profile:0.1"

# This file is a template, it will be filled with values from tc.yaml before passing to the traffic generator

name: rfc2544
description: Traffic profile to run RFC2544 latency
traffic_profile:
  traffic_type: RFC2544Profile # defines traffic behavior - constant or look for highest possible throughput
  frame_rate: 100  # pc of linerate
  duration: {{ duration }}

uplink_0:
  ipv4:
    id: 1
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_0', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_0', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_0', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_0', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_0:
  ipv4:
    id: 2
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_0', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_0', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_0', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_0', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_1:
  ipv4:
    id: 3
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_1', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_1', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_1', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_1', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_1:
  ipv4:
    id: 4
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_1', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_1', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_1', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_1', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_2:
  ipv4:
    id: 5
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_2', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_2', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_2', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_2', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_2:
  ipv4:
    id: 6
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_2', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_2', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_2', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_2', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_3:
  ipv4:
    id: 7
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_3', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_3', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_3', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_3', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_3:
  ipv4:
    id: 8
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_3', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_3', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_3', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_3', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_4:
  ipv4:
    id: 9
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_4', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_4', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_4', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_4', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_4:
  ipv4:
    id: 10
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_4', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_4', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_4', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_4', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_5:
  ipv4:
    id: 11
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_5', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_5', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_5', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_5', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_5:
  ipv4:
    id: 12
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_5', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_5', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_5', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_5', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_6:
  ipv4:
    id: 13
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_6', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_6', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_6', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_6', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_6:
  ipv4:
    id: 14
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_6', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_6', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_6', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_6', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_7:
  ipv4:
    id: 15
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_7', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_7', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_7', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_7', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_7:
  ipv4:
    id: 16
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_7', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_7', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_7', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_7', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_8:
  ipv4:
    id: 17
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_8', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_8', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_8', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_8', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_8:
  ipv4:
    id: 18
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_8', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_8', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_8', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_8', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
uplink_9:
  ipv4:
    id: 19
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.uplink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.uplink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.uplink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.uplink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.uplink.512B', '0') }}"
        570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.src_ip_9', '1.1.1.1-1.1.255.255') }}"
      dstip4: "{{get(flow, 'flow.dst_ip_9', '90.90.1.1-90.90.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.src_port_9', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.dst_port_9', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
downlink_9:
  ipv4:
    id: 20
    outer_l2:
      framesize:
        64B: "{{ get(imix, 'imix.downlink.64B', '0') }}"
        128B: "{{ get(imix, 'imix.downlink.128B', '0') }}"
        256B: "{{ get(imix, 'imix.downlink.256B', '0') }}"
        373b: "{{ get(imix, 'imix.downlink.373B', '0') }}"
        512B: "{{ get(imix, 'imix.downlink.512B', '0') }}"
        570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
        1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
        1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
        1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"

    outer_l3v4:
      proto: "udp"
      srcip4: "{{get(flow, 'flow.dst_ip_9', '90.90.1.1-90.90.255.255') }}"
      dstip4: "{{get(flow, 'flow.src_ip_9', '1.1.1.1-1.1.255.255') }}"
      count: "{{get(flow, 'flow.count', '1') }}"
      ttl: 32
      dscp: 0
    outer_l4:
      srcport: "{{get(flow, 'flow.dst_port_9', '1234-4321') }}"
      dstport: "{{get(flow, 'flow.src_port_9', '2001-4001') }}"
      count: "{{get(flow, 'flow.count', '1') }}"