93 lines
3.0 KiB
Plaintext
93 lines
3.0 KiB
Plaintext
module PAP_Types {
|
|
|
|
/* (C) 2019 by Harald Welte <laforge@gnumonks.org>
|
|
* All rights reserved.
|
|
*
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
* (at your option) any later version.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
import from Osmocom_Types all;
|
|
|
|
/* RFC1334 */
|
|
type enumerated PapCode {
|
|
PAP_AuthenticateReq ('01'O),
|
|
PAP_AuthenticateAck ('02'O),
|
|
PAP_AuthenticateNak ('03'O)
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
type record PapPacket {
|
|
PapCode code,
|
|
uint8_t identifier,
|
|
uint16_t len,
|
|
PapPayloadUnion payload
|
|
} with {
|
|
variant (len) "LENGTHTO(code,identifier,len,payload)"
|
|
variant (payload) "CROSSTAG( req, code = PAP_AuthenticateReq;
|
|
ack, code = PAP_AuthenticateAck;
|
|
nak, code = PAP_AuthenticateNak)"
|
|
};
|
|
|
|
type union PapPayloadUnion {
|
|
PapAuthReq req,
|
|
PapAuthResp ack,
|
|
PapAuthResp nak
|
|
};
|
|
|
|
type record PapAuthReq {
|
|
uint8_t peer_id_len,
|
|
octetstring peer_id,
|
|
uint8_t passwd_len,
|
|
octetstring passwd
|
|
} with {
|
|
variant (peer_id_len) "LENGTHTO(peer_id)"
|
|
variant (passwd_len) "LENGTHTO(passwd)"
|
|
};
|
|
|
|
type record PapAuthResp {
|
|
uint8_t msg_len,
|
|
charstring msg
|
|
} with { variant (msg_len) "LENGTHTO(msg)" };
|
|
|
|
external function enc_PapPacket(in PapPacket inp) return octetstring
|
|
with { extension "prototype(convert)" extension "encode(RAW)" };
|
|
|
|
external function dec_PapPacket(in octetstring inp) return PapPacket
|
|
with { extension "prototype(convert)" extension "decode(RAW)" };
|
|
|
|
|
|
template (value) PapPacket ts_PAP(template (value) PapCode code, template (value) uint8_t identifier,
|
|
template (value) PapPayloadUnion payload) := {
|
|
code := code,
|
|
identifier := identifier,
|
|
len := 0, /* overwritten */
|
|
payload := payload
|
|
}
|
|
template PapPacket tr_PAP(template PapCode code, template uint8_t identifier, template PapPayloadUnion payload) := {
|
|
code := code,
|
|
identifier := identifier,
|
|
len := ?,
|
|
payload := payload
|
|
}
|
|
|
|
template (value) PapPacket ts_PAP_AuthReq(uint8_t identifier := 0, octetstring peer_id, octetstring passwd) :=
|
|
ts_PAP(PAP_AuthenticateReq, identifier,
|
|
{ req := { peer_id_len := 0, peer_id := peer_id,
|
|
passwd_len := 0, passwd := passwd } });
|
|
template PapPacket tr_PAP_AuthReq(template uint8_t identifier := ?, octetstring peer_id, octetstring passwd) :=
|
|
tr_PAP(PAP_AuthenticateReq, identifier,
|
|
{ req := { peer_id_len := ?, peer_id := peer_id,
|
|
passwd_len := ?, passwd := passwd } });
|
|
template (value) PapPacket ts_PAP_AuthAck(uint8_t identifier := 0, charstring msg) :=
|
|
ts_PAP(PAP_AuthenticateAck, identifier, { ack := { msg_len := 0, msg := msg } });
|
|
template PapPacket tr_PAP_AuthAck(template uint8_t identifier := ?) :=
|
|
tr_PAP(PAP_AuthenticateAck, identifier, { ack := ? });
|
|
template (value) PapPacket ts_PAP_AuthNak(uint8_t identifier := 0, charstring msg) :=
|
|
ts_PAP(PAP_AuthenticateNak, identifier, { nak := { msg_len := 0, msg := msg } });
|
|
template PapPacket tr_PAP_AuthNak(template uint8_t identifier := ?) :=
|
|
tr_PAP(PAP_AuthenticateNak, identifier, { nak := ? });
|
|
|
|
} with { encode "RAW" ; variant "FIELDORDER(msb)" }
|