[hipl-commit] [tiny] Rev 3751: Split hip_handle_i1.

  • From: Tim Just <tim.just@xxxxxxxxxxxxxx>
  • To: hipl-commit@xxxxxxxxxxxxx
  • Date: Wed, 31 Mar 2010 10:37:17 +0300

Committer: Tim Just <tim.just@xxxxxxxxxxxxxx>
Date: 31/03/2010 at 10:37:17
Revision: 3751
Revision-id: tim.just@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Branch nick: tiny

Log:
  Split hip_handle_i1. 
  
  Separated security checks for incoming I1 packets from further packet
  handling. This allows more flexibility. Now the handling functions for
  I1 packets are registered using the designated priority.

Modified:
  M  hipd/init.c
  M  hipd/input.c
  M  hipd/input.h

=== modified file 'hipd/init.c'
--- hipd/init.c 2010-03-30 13:36:23 +0000
+++ hipd/init.c 2010-03-31 07:34:31 +0000
@@ -621,39 +621,55 @@
 
     HIP_DEBUG("Initialize handle functions.\n");
 
-    hip_register_handle_function(HIP_I1, HIP_STATE_UNASSOCIATED, 
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_UNASSOCIATED, &hip_send_r1, 
1100);
-    hip_register_handle_function(HIP_I1, HIP_STATE_I1_SENT,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_I1_SENT,      &hip_send_r1, 
1100);
-    hip_register_handle_function(HIP_I1, HIP_STATE_I2_SENT,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_I2_SENT,      &hip_send_r1, 
1100);
-    hip_register_handle_function(HIP_I1, HIP_STATE_R2_SENT,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_R2_SENT,      &hip_send_r1, 
1100);
-    hip_register_handle_function(HIP_I1, HIP_STATE_ESTABLISHED,  
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_ESTABLISHED,  &hip_send_r1, 
1100);
-    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSING,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSING,      &hip_send_r1, 
1100);
-    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSED,       
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSED,       &hip_send_r1, 
1100);
-    hip_register_handle_function(HIP_I1, HIP_STATE_NONE,         
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_I1, HIP_STATE_NONE,         &hip_send_r1, 
1100);
+    hip_register_handle_function(HIP_I1, HIP_STATE_UNASSOCIATED, 
&hip_check_i1,  20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_UNASSOCIATED, 
&hip_handle_i1, 30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_UNASSOCIATED, &hip_send_r1, 
  40000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_I1_SENT, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_I1_SENT, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_I1_SENT, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_I2_SENT, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_I2_SENT, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_I2_SENT, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_R2_SENT, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_R2_SENT, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_R2_SENT, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_ESTABLISHED, &hip_check_i1, 
 20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_ESTABLISHED, 
&hip_handle_i1, 30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_ESTABLISHED, &hip_send_r1,  
 40000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSING, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSING, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSING, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSED, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSED, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_CLOSED, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_NONE, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_NONE, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_I1, HIP_STATE_NONE, &hip_send_r1,   
40000);
 
-    hip_register_handle_function(HIP_DATA, HIP_STATE_UNASSOCIATED, 
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_UNASSOCIATED, 
&hip_send_r1, 1100);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_I1_SENT,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_I1_SENT,      
&hip_send_r1, 1100);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_I2_SENT,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_I2_SENT,      
&hip_send_r1, 1100);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_R2_SENT,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_R2_SENT,      
&hip_send_r1, 1100);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_ESTABLISHED,  
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_ESTABLISHED,  
&hip_send_r1, 1100);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSING,      
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSING,      
&hip_send_r1, 1100);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSED,       
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSED,       
&hip_send_r1, 1100);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_NONE,         
&hip_handle_i1, 1000);
-    hip_register_handle_function(HIP_DATA, HIP_STATE_NONE,         
&hip_send_r1, 1100);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_UNASSOCIATED, 
&hip_check_i1,  20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_UNASSOCIATED, 
&hip_handle_i1, 30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_UNASSOCIATED, 
&hip_send_r1,   40000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_I1_SENT, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_I1_SENT, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_I1_SENT, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_I2_SENT, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_I2_SENT, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_I2_SENT, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_R2_SENT, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_R2_SENT, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_R2_SENT, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_ESTABLISHED, 
&hip_check_i1,  20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_ESTABLISHED, 
&hip_handle_i1, 30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_ESTABLISHED, 
&hip_send_r1,   40000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSING, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSING, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSING, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSED, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSED, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_CLOSED, &hip_send_r1,   
40000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_NONE, &hip_check_i1,  
20000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_NONE, &hip_handle_i1, 
30000);
+    hip_register_handle_function(HIP_DATA, HIP_STATE_NONE, &hip_send_r1,   
40000);
 
     hip_register_handle_function(HIP_I2, HIP_STATE_UNASSOCIATED, 
&hip_handle_i2, 1000);
     hip_register_handle_function(HIP_I2, HIP_STATE_UNASSOCIATED, &hip_send_r2, 
1100);

=== modified file 'hipd/input.c'
--- hipd/input.c        2010-03-25 18:46:34 +0000
+++ hipd/input.c        2010-03-31 07:34:31 +0000
@@ -1807,6 +1807,32 @@
     return err;
 }
 
+int hip_check_i1(const uint8_t packet_type,
+                 const uint32_t ha_state,
+                 struct hip_packet_context *packet_ctx)
+{
+    int err = 0, mask = 0;
+#ifdef CONFIG_HIP_PERFORMANCE
+    HIP_DEBUG("Start PERF_BASE\n");
+    hip_perf_start_benchmark(perf_set, PERF_BASE);
+    HIP_DEBUG("Start PERF_I1\n");
+    hip_perf_start_benchmark(perf_set, PERF_I1);
+#endif
+    HIP_INFO_HIT("I1 Source HIT:", &(packet_ctx->input_msg)->hits);
+    HIP_INFO_IN6ADDR("I1 Source IP :", packet_ctx->src_addr);
+
+    HIP_ASSERT(!ipv6_addr_any(&(packet_ctx->input_msg)->hitr));
+
+    HIP_IFF(!hip_controls_sane(ntohs(packet_ctx->input_msg->control), mask),
+            -1,
+            packet_ctx->error = 1,
+            "Received illegal controls in I1: 0x%x. Dropping\n",
+            ntohs(packet_ctx->input_msg->control));
+
+out_err:
+    return err;
+}
+
 /**
  * Handles an incoming I1 packet.
  *
@@ -1849,15 +1875,7 @@
                   const uint32_t ha_state,
                   struct hip_packet_context *packet_ctx)
 {
-#ifdef CONFIG_HIP_PERFORMANCE
-    HIP_DEBUG("Start PERF_BASE\n");
-    hip_perf_start_benchmark(perf_set, PERF_BASE);
-    HIP_DEBUG("Start PERF_I1\n");
-    hip_perf_start_benchmark(perf_set, PERF_I1);
-#endif
-    int err = 0, mask = 0, src_hit_is_our;
-
-    HIP_ASSERT(!ipv6_addr_any(&(packet_ctx->input_msg)->hitr));
+    int err = 0, src_hit_is_our;
 
     /* In some environments, a copy of broadcast our own I1 packets
      * arrive at the local host too. The following variable handles
@@ -1894,16 +1912,10 @@
                 "Could not find source address\n");
     }
 
-    HIP_IFF(!hip_controls_sane(ntohs(packet_ctx->input_msg->control), mask),
-            -1,
-            packet_ctx->error = 1,
-            "Received illegal controls in I1: 0x%x. Dropping\n",
-            ntohs(packet_ctx->input_msg->control));
-
-    HIP_INFO_HIT("I1 Source HIT:", &(packet_ctx->input_msg)->hits);
-    HIP_INFO_IN6ADDR("I1 Source IP :", packet_ctx->src_addr);
-
 out_err:
+    if (err) {
+        packet_ctx->error = err;
+    }
     return err;
 }
 

=== modified file 'hipd/input.h'
--- hipd/input.h        2010-03-10 17:48:17 +0000
+++ hipd/input.h        2010-03-31 07:34:31 +0000
@@ -77,6 +77,10 @@
 
 int hip_receive_udp_control_packet(struct hip_packet_context *packet_ctx);
 
+int hip_check_i1(const uint8_t packet_type,
+                 const uint32_t ha_state,
+                 struct hip_packet_context *packet_ctx);
+
 int hip_handle_i1(const uint8_t packet_type,
                   const uint32_t ha_state,
                   struct hip_packet_context *ctx);

Other related posts:

  • » [hipl-commit] [tiny] Rev 3751: Split hip_handle_i1. - Tim Just