1 diff --git a/src/plugins/snat/out2in.c b/src/plugins/snat/out2in.c
2 index 5c12b47..f7c7caf 100644
3 --- a/src/plugins/snat/out2in.c
4 +++ b/src/plugins/snat/out2in.c
8 * Copyright (c) 2016 Cisco and/or its affiliates.
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 @@ -658,6 +659,26 @@ snat_out2in_node_fn (vlib_main_t * vm,
11 n_left_from = frame->n_vectors;
12 next_index = node->cached_next_index;
15 + ip4_address_t * sdnc_addr = malloc(4);
16 + char line_input[128];
17 + char * path = "/opt/config/ip.txt";
18 + FILE * f = fopen(path, "r");
20 + printf("cannot open such file\n");
22 + while (fgets(line_input, 128, f) != NULL){
23 + if (!strcmp(strtok(line_input, " "),"sdnc_ip:")){
24 + char * ip = strtok(NULL, " ");
25 + char * num = strtok(ip, ".");
26 + sdnc_addr->data[0] = atoi(num);
27 + for (int i = 1; i < 4; i ++){
28 + num = strtok(NULL, ".");
29 + sdnc_addr->data[i] = atoi(num);
34 while (n_left_from > 0)
37 @@ -733,6 +754,13 @@ snat_out2in_node_fn (vlib_main_t * vm,
39 proto0 = ip_proto_to_snat_proto (ip0->protocol);
42 + if (PREDICT_TRUE (ip0->src_address.data_u32 != sdnc_addr->data_u32))
44 + next0 = SNAT_OUT2IN_NEXT_LOOKUP;
48 if (PREDICT_FALSE (proto0 == ~0))
50 snat_out2in_unknown_proto(sm, b0, ip0, rx_fib_index0);
51 @@ -871,6 +899,13 @@ snat_out2in_node_fn (vlib_main_t * vm,
53 proto1 = ip_proto_to_snat_proto (ip1->protocol);
56 + if (PREDICT_TRUE (ip1->src_address.data_u32 != sdnc_addr->data_u32))
58 + next1 = SNAT_OUT2IN_NEXT_LOOKUP;
62 if (PREDICT_FALSE (proto1 == ~0))
64 snat_out2in_unknown_proto(sm, b1, ip1, rx_fib_index1);
65 @@ -1033,6 +1068,13 @@ snat_out2in_node_fn (vlib_main_t * vm,
67 proto0 = ip_proto_to_snat_proto (ip0->protocol);
70 + if (PREDICT_TRUE (ip0->src_address.data_u32 != sdnc_addr->data_u32))
72 + next0 = SNAT_OUT2IN_NEXT_LOOKUP;
76 if (PREDICT_FALSE (proto0 == ~0))
78 snat_out2in_unknown_proto(sm, b0, ip0, rx_fib_index0);
79 diff --git a/src/vnet/dhcp/client.c b/src/vnet/dhcp/client.c
80 index 014f17a..296e1a7 100644
81 --- a/src/vnet/dhcp/client.c
82 +++ b/src/vnet/dhcp/client.c
83 @@ -427,6 +427,16 @@ send_dhcp_pkt (dhcp_client_main_t * dcm, dhcp_client_t * c,
84 clib_memcpy (o->data, c->option_55_data, vec_len(c->option_55_data));
85 o = (dhcp_option_t *) (((uword) o) + (o->length + 2));
88 + u8 sub2_len = vec_len(hw->hw_address);
90 + o->length = sub2_len + 2;
92 + clib_memcpy (o->data, &sub_option, 1);
93 + clib_memcpy (o->data + 1,&sub2_len, 1);
94 + clib_memcpy (o->data + 2, hw->hw_address, vec_len(hw->hw_address));
95 + o = (dhcp_option_t *) (((uword) o) + (o->length +2));