From ea1ac5b186bd377915e9905a17b2e67df6d0bb50 Mon Sep 17 00:00:00 2001 From: Dmitry Kozlov Date: Tue, 28 Sep 2010 01:34:35 +0400 Subject: ppp: implemeted Protocol-Reject --- accel-pptpd/logs/log_file.c | 4 ++-- accel-pptpd/ppp/ppp.c | 7 ++++--- accel-pptpd/ppp/ppp.h | 1 + accel-pptpd/ppp/ppp_lcp.c | 22 ++++++++++++++++++++++ 4 files changed, 29 insertions(+), 5 deletions(-) (limited to 'accel-pptpd') diff --git a/accel-pptpd/logs/log_file.c b/accel-pptpd/logs/log_file.c index 1c1538c..be615ad 100644 --- a/accel-pptpd/logs/log_file.c +++ b/accel-pptpd/logs/log_file.c @@ -36,14 +36,14 @@ struct log_file_t int fd; int new_fd; off_t offset; - uint64_t magic; + unsigned long magic; }; struct log_file_pd_t { struct ppp_pd_t pd; struct log_file_t lf; - uint64_t tmp; + unsigned long tmp; }; static int conf_color; diff --git a/accel-pptpd/ppp/ppp.c b/accel-pptpd/ppp/ppp.c index 03a8db0..dbb6709 100644 --- a/accel-pptpd/ppp/ppp.c +++ b/accel-pptpd/ppp/ppp.c @@ -274,7 +274,8 @@ cont: } } - log_ppp_warn("ppp_chan_read: discarding unknown packet %x\n", proto); + lcp_send_proto_rej(ppp, proto); + //log_ppp_warn("ppp_chan_read: discarding unknown packet %x\n", proto); } } @@ -316,8 +317,8 @@ cont: goto cont; } } - - log_ppp_warn("ppp_unit_read: discarding unknown packet %x\n",proto); + lcp_send_proto_rej(ppp, proto); + //log_ppp_warn("ppp_unit_read: discarding unknown packet %x\n", proto); } } diff --git a/accel-pptpd/ppp/ppp.h b/accel-pptpd/ppp/ppp.h index 32615c2..afc26a3 100644 --- a/accel-pptpd/ppp/ppp.h +++ b/accel-pptpd/ppp/ppp.h @@ -136,6 +136,7 @@ void ppp_init(struct ppp_t *ppp); int establish_ppp(struct ppp_t *ppp); int ppp_chan_send(struct ppp_t *ppp, void *data, int size); int ppp_unit_send(struct ppp_t *ppp, void *data, int size); +void lcp_send_proto_rej(struct ppp_t *ppp, uint16_t proto); struct ppp_fsm_t* ppp_lcp_init(struct ppp_t *ppp); void ppp_layer_started(struct ppp_t *ppp,struct ppp_layer_data_t*); diff --git a/accel-pptpd/ppp/ppp_lcp.c b/accel-pptpd/ppp/ppp_lcp.c index 66d31da..c6415e9 100644 --- a/accel-pptpd/ppp/ppp_lcp.c +++ b/accel-pptpd/ppp/ppp_lcp.c @@ -26,6 +26,7 @@ static int conf_echo_interval = 0; static int conf_echo_failure = 3; static LIST_HEAD(option_handlers); +static struct ppp_layer_t lcp_layer; static void lcp_layer_up(struct ppp_fsm_t*); static void lcp_layer_down(struct ppp_fsm_t*); @@ -616,6 +617,27 @@ static void send_term_ack(struct ppp_fsm_t *fsm) ppp_chan_send(lcp->ppp, &hdr, 6); } +void lcp_send_proto_rej(struct ppp_t *ppp, uint16_t proto) +{ + struct ppp_lcp_t *lcp = container_of(ppp_find_layer_data(ppp, &lcp_layer), typeof(*lcp), ld); + struct rej_msg_t + { + struct lcp_hdr_t hdr; + uint16_t proto; + } __attribute__((packed)) msg = { + .hdr.proto = htons(PPP_LCP), + .hdr.code = PROTOREJ, + .hdr.id = ++lcp->fsm.id, + .hdr.len = htons(6), + .proto = proto, + }; + + log_ppp_debug("send [LCP ProtoRej id=%i <%x>]\n", msg.hdr.id, proto); + + ppp_chan_send(lcp->ppp, &msg, sizeof(msg)); +} + + static void lcp_recv(struct ppp_handler_t*h) { struct lcp_hdr_t *hdr; -- cgit v1.2.3