diff options
author | Guillaume Zajac <guillaume.zajac@linux.intel.com> | 2011-06-29 10:20:24 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-06-29 00:33:42 -0500 |
commit | fed838f79fe86eaeab7c28f45556f6e230568c58 (patch) | |
tree | 22159056ae15d5aa641c45b54521776b9285a085 /gatchat/ppp_lcp.c | |
parent | 84ccc874dad70dfa4464ae5a1b295373211882ca (diff) | |
download | ofono-fed838f79fe86eaeab7c28f45556f6e230568c58.tar.bz2 |
GAtPPP: Add PFC option support
Diffstat (limited to 'gatchat/ppp_lcp.c')
-rw-r--r-- | gatchat/ppp_lcp.c | 35 |
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); +} |