"REQSENT", "ACKRCVD", "ACKSENT", "OPENED" };
#define pppcp_trace(p) do { \
- g_print("%s: current state %d:%s\n", __FUNCTION__, \
+ g_print("%s: %s: current state %d:%s\n", p->prefix, __FUNCTION__, \
p->state, pppcp_state_strings[p->state]); \
} while (0)
#else
g_free(data);
}
-struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto,
- gpointer priv)
+struct pppcp_data *pppcp_new(struct pppcp_protocol_data *protocol_data)
{
struct pppcp_data *data;
data->max_failure = MAX_FAILURE;
data->event_queue = g_queue_new();
data->identifier = 0;
- data->ppp = ppp;
- data->proto = proto;
- data->priv = priv;
+ data->ppp = protocol_data->ppp;
+ data->proto = protocol_data->proto;
+ data->priv = protocol_data->priv;
+ data->prefix = protocol_data->prefix;
/* setup func ptrs for processing packet by pppcp code */
data->packet_ops[CONFIGURE_REQUEST - 1] =
guint restart_timer;
};
+struct pppcp_protocol_data {
+ guint16 proto;
+ const char *prefix;
+ gpointer priv;
+ GAtPPP *ppp;
+};
+
struct pppcp_data {
enum pppcp_state state;
struct pppcp_timer_data config_timer_data;
guint length);
gpointer priv;
guint16 proto;
+ const char *prefix;
};
-struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto, gpointer priv);
+struct pppcp_data *pppcp_new(struct pppcp_protocol_data *proto_data);
void pppcp_free(struct pppcp_data *data);
void pppcp_add_config_option(struct pppcp_data *data,
struct ppp_option *option);
}
}
+static const char lcp_prefix[] = "lcp";
+
+static struct pppcp_protocol_data lcp_protocol_data = {
+ .proto = LCP_PROTOCOL,
+ .prefix = lcp_prefix,
+};
+
struct ppp_packet_handler lcp_packet_handler = {
.proto = LCP_PROTOCOL,
.handler = pppcp_process_packet,
pppcp_free(lcp);
}
-struct pppcp_data * lcp_new(GAtPPP *ppp)
+struct pppcp_data *lcp_new(GAtPPP *ppp)
{
struct pppcp_data *pppcp;
struct ppp_option *option;
guint16 codes = LCP_SUPPORTED_CODES;
- pppcp = pppcp_new(ppp, LCP_PROTOCOL, NULL);
+ lcp_protocol_data.ppp = ppp;
+ pppcp = pppcp_new(&lcp_protocol_data);
if (!pppcp) {
g_print("Failed to allocate PPPCP struct\n");
return NULL;
g_print("ipcp finished\n");
}
+static const char ipcp_prefix[] = "ipcp";
+
struct pppcp_action ipcp_action = {
.this_layer_up = ipcp_up,
.this_layer_down = ipcp_down,
.option_process = ipcp_option_process,
};
+static struct pppcp_protocol_data ipcp_protocol_data = {
+ .proto = IPCP_PROTO,
+ .prefix = ipcp_prefix,
+};
+
struct ppp_packet_handler ipcp_packet_handler = {
.proto = IPCP_PROTO,
.handler = pppcp_process_packet,
if (!data)
return NULL;
- pppcp = pppcp_new(ppp, IPCP_PROTO, data);
+ ipcp_protocol_data.ppp = ppp;
+ ipcp_protocol_data.priv = data;
+ pppcp = pppcp_new(&ipcp_protocol_data);
if (!pppcp) {
g_printerr("Failed to allocate PPPCP struct\n");
g_free(data);
return NULL;
}
pppcp_set_valid_codes(pppcp, IPCP_SUPPORTED_CODES);
- pppcp->priv = data;
/* set the actions */
pppcp->action = &ipcp_action;