/* pptp_quirks.h ...... various options to fix quirks found in buggy adsl modems
 *                      mulix <mulix@actcom.co.il>
 *
 * $Id: pptp_quirks.h,v 1.2 2011/12/19 07:15:03 quozl Exp $
 */

#ifndef INC_PPTP_QUIRKS_H
#define INC_PPTP_QUIRKS_H

/* isp defs - correspond to slots in the fixups table */
#define BEZEQ_ISRAEL "BEZEQ_ISRAEL"

/* vendor defs */

#define ORCKIT 1
#define ALCATEL 2

/* device defs */

#define ORCKIT_ATUR2 1
#define ORCKIT_ATUR3 2

#include "pptp_msg.h"
#include "pptp_ctrl.h"

struct pptp_fixup {
    const char* isp;    /* which isp? e.g. Bezeq in Israel */
    int vendor; /* which vendor? e.g. Orckit */
    int device; /* which device? e.g. Orckit Atur3 */

    /* use this hook to build your own out call request packet */
    int (*out_call_rqst_hook)(struct pptp_out_call_rqst* packet);

    /* use this hook to build your own start control connection packet */
    /* note that this hook is called from two different places, depending
       on whether this is a request or reply */
    int (*start_ctrl_conn)(struct pptp_start_ctrl_conn* packet);

    /* use this hook if you need to send a 'set_link' packet once
       the connection is established */
    int (*set_link_hook)(struct pptp_set_link_info* packet,
			 int peer_call_id);
};

extern struct pptp_fixup pptp_fixups[];

/* find the index for this isp in the quirks table */
/* return the index on success, -1 if not found */
int find_quirk(const char* isp_name);

/* set the global quirk index. return 0 on success, non 0 otherwise */
int set_quirk_index(int index);

/* get the global quirk index. return the index on success,
   -1 if no quirk is defined */
int get_quirk_index(void);


#endif /* INC_PPTP_QUIRKS_H */
