summaryrefslogtreecommitdiffstats
path: root/gatchat/ppp_lcp.c
diff options
context:
space:
mode:
authorGuillaume Zajac <guillaume.zajac@linux.intel.com>2011-06-29 10:20:24 +0200
committerDenis Kenzior <denkenz@gmail.com>2011-06-29 00:33:42 -0500
commitfed838f79fe86eaeab7c28f45556f6e230568c58 (patch)
tree22159056ae15d5aa641c45b54521776b9285a085 /gatchat/ppp_lcp.c
parent84ccc874dad70dfa4464ae5a1b295373211882ca (diff)
downloadofono-fed838f79fe86eaeab7c28f45556f6e230568c58.tar.bz2
GAtPPP: Add PFC option support
Diffstat (limited to 'gatchat/ppp_lcp.c')
-rw-r--r--gatchat/ppp_lcp.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c
index c86a7d82..01b36bff 100644
--- a/gatchat/ppp_lcp.c
+++ b/gatchat/ppp_lcp.c
@@ -58,12 +58,13 @@ enum lcp_options {
ACFC = 8,
};
-/* Maximum size of all options, we only ever request ACCM, MRU and ACFC */
-#define MAX_CONFIG_OPTION_SIZE 12
+/* Maximum size of all options, we only ever request ACCM, MRU, ACFC and PFC */
+#define MAX_CONFIG_OPTION_SIZE 14
#define REQ_OPTION_ACCM 0x1
#define REQ_OPTION_MRU 0x2
#define REQ_OPTION_ACFC 0x4
+#define REQ_OPTION_PFC 0x8
struct lcp_data {
guint8 options[MAX_CONFIG_OPTION_SIZE];
@@ -108,6 +109,13 @@ static void lcp_generate_config_options(struct lcp_data *lcp)
len += 2;
}
+ if (lcp->req_options & REQ_OPTION_PFC) {
+ lcp->options[len] = PFC;
+ lcp->options[len + 1] = 2;
+
+ len += 2;
+ }
+
lcp->options_len = len;
}
@@ -293,9 +301,17 @@ static enum rcr_result lcp_rcr(struct pppcp_data *pppcp,
ppp_set_mtu(ppp, ppp_option_iter_get_data(&iter));
break;
case MAGIC_NUMBER:
- case PFC:
/* don't care */
break;
+ case PFC:
+ {
+ struct lcp_data *lcp = pppcp_get_data(pppcp);
+
+ if (lcp->req_options & REQ_OPTION_PFC)
+ ppp_set_xmit_pfc(ppp, TRUE);
+
+ break;
+ }
case ACFC:
{
struct lcp_data *lcp = pppcp_get_data(pppcp);
@@ -367,3 +383,16 @@ void lcp_set_acfc_enabled(struct pppcp_data *pppcp, gboolean enabled)
lcp_generate_config_options(lcp);
pppcp_set_local_options(pppcp, lcp->options, lcp->options_len);
}
+
+void lcp_set_pfc_enabled(struct pppcp_data *pppcp, gboolean enabled)
+{
+ struct lcp_data *lcp = pppcp_get_data(pppcp);
+
+ if (enabled == TRUE)
+ lcp->req_options |= REQ_OPTION_PFC;
+ else
+ lcp->req_options &= ~REQ_OPTION_PFC;
+
+ lcp_generate_config_options(lcp);
+ pppcp_set_local_options(pppcp, lcp->options, lcp->options_len);
+}