ppp: implement Max-Failure counter
authorKristen Carlson Accardi <kristen@linux.intel.com>
Sat, 3 Apr 2010 05:27:00 +0000 (22:27 -0700)
committerDenis Kenzior <denkenz@gmail.com>
Mon, 5 Apr 2010 14:45:14 +0000 (09:45 -0500)
put a cap on the number of Configure-Nak packets we send.

gatchat/ppp_cp.c
gatchat/ppp_cp.h

index 63d724d..c5af89a 100644 (file)
@@ -232,6 +232,15 @@ static void copy_option(gpointer data, gpointer user_data)
        *location += option->length;
 }
 
+static void reject_option(gpointer data, gpointer user_data)
+{
+       struct ppp_option *option = data;
+       struct pppcp_data *pppcp = user_data;
+
+       pppcp->rejected_options =
+               g_list_append(pppcp->rejected_options, option);
+}
+
 static void print_option(gpointer data, gpointer user_data)
 {
        struct ppp_option *option = data;
@@ -309,6 +318,8 @@ static void pppcp_send_configure_ack(struct pppcp_data *data,
 
        pppcp_trace(data);
 
+       data->failure_counter = 0;
+
        g_list_foreach(data->acceptable_options, print_option, data);
 
        /* subtract for header. */
@@ -341,6 +352,16 @@ static void pppcp_send_configure_nak(struct pppcp_data *data,
        guint8 olength;
        guint8 *odata;
 
+       /*
+        * if we have exceeded our Max-Failure counter, we need
+        * to convert all packets to Configure-Reject
+        */
+       if (data->failure_counter >= data->max_failure) {
+               g_list_foreach(data->unacceptable_options, reject_option, data);
+               g_list_free(data->unacceptable_options);
+               data->unacceptable_options = NULL;
+       }
+
        /* if we have any rejected options, send a config-reject */
        if (g_list_length(data->rejected_options)) {
                pppcp_trace(data);
@@ -389,6 +410,7 @@ static void pppcp_send_configure_nak(struct pppcp_data *data,
                                ntohs(packet->length));
 
                pppcp_packet_free(packet);
+               data->failure_counter++;
        }
 }
 
index 5b5d589..ee7ac8d 100644 (file)
@@ -111,6 +111,7 @@ struct pppcp_data {
        struct pppcp_timer_data config_timer_data;
        struct pppcp_timer_data terminate_timer_data;
        guint max_failure;
+       guint failure_counter;
        guint32 magic_number;
        GList *config_options;
        GList *acceptable_options;