summaryrefslogtreecommitdiffstats
path: root/src/scripts/vnet/nat44
blob: bce96487dd2ba4d814c74b8da2e5e1c8845e38e1 (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
create packet-generator interface pg0
create packet-generator interface pg1

packet-generator new {
  name f1
  limit 1000000
  node ip4-input
  size 64-64
  interface pg0
  data {
    UDP: 10.0.0.3 -> 172.16.1.2
    UDP: 3000 -> 3001
    length 128 checksum 0 incrementing 1
  }
}


packet-generator new {
  name f2
  limit 1000000
  node ip4-input
  size 64-64
  interface pg0
  data {
    UDP: 10.0.0.3 -> 172.16.1.2
    UDP: 3005 -> 3006
    length 128 checksum 0 incrementing 1
  }
}

nat44 add address 172.16.1.3
set int ip address pg0 10.0.0.1/24
set int ip address pg1 172.16.1.1/24
set int state pg0 up
set int state pg1 up
set ip arp static pg0 10.0.0.3 abcd.abcd.abcd
set ip arp static pg0 10.0.0.4 abcd.abcd.abcd
set ip arp static pg1 172.16.1.2 cdef.abcd.abcd
set int nat44 in pg0 out pg1
ground-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) 2020 Cisco and/or its affiliates.
 * 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.
 */

#include <cnat/cnat_session.h>
#include <cnat/cnat_client.h>

static uword
cnat_scanner_process (vlib_main_t * vm,
		      vlib_node_runtime_t * rt, vlib_frame_t * f)
{
  uword event_type, *event_data = 0;
  cnat_main_t *cm = &cnat_main;
  f64 start_time;
  int enabled = 0, i = 0;

  while (1)
    {
      if (enabled)
	vlib_process_wait_for_event_or_clock (vm, cm->scanner_timeout);
      else
	vlib_process_wait_for_event (vm);

      event_type = vlib_process_get_events (vm, &event_data);
      vec_reset_length (event_data);

      start_time = vlib_time_now (vm);

      switch (event_type)
	{
	  /* timer expired */
	case ~0:
	  break;
	case CNAT_SCANNER_OFF:
	  enabled = 0;
	  break;
	case CNAT_SCANNER_ON:
	  enabled = 1;
	  break;
	default:
	  ASSERT (0);
	}

      cnat_client_throttle_pool_process ();
      i = cnat_session_scan (vm, start_time, i);
    }
  return 0;
}

/* *INDENT-OFF* */
VLIB_REGISTER_NODE (cnat_scanner_process_node) = {
  .function = cnat_scanner_process,
  .type = VLIB_NODE_TYPE_PROCESS,
  .name = "cnat-scanner-process",
};
/* *INDENT-ON* */

static clib_error_t *
cnat_scanner_cmd (vlib_main_t * vm,
		  unformat_input_t * input, vlib_cli_command_t * c)
{
  cnat_scanner_cmd_t cmd;

  cmd = CNAT_SCANNER_ON;

  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    {
      if (unformat (input, "on"))
	cmd = CNAT_SCANNER_ON;
      else if (unformat (input, "off"))
	cmd = CNAT_SCANNER_OFF;
      else
	return (clib_error_return (0, "unknown input '%U'",
				   format_unformat_error, input));
    }
  cnat_enable_disable_scanner (cmd);

  return (NULL);
}

/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cnat_scanner_cmd_node, static) = {
  .path = "test cnat scanner",
  .function = cnat_scanner_cmd,
  .short_help = "test cnat scanner",
};
/* *INDENT-ON* */

static clib_error_t *
cnat_scanner_init (vlib_main_t * vm)
{
  cnat_main_t *cm = &cnat_main;
  cm->scanner_node_index = cnat_scanner_process_node.index;

  return (NULL);
}

VLIB_INIT_FUNCTION (cnat_scanner_init);

/*
 * fd.io coding-style-patch-verification: ON
 *
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */