Hello,
I am trying to register with the pf_key interface by using the
extended register as mentioned in [1] (SADB_REGISTER with
sadb_msg_satype = 0).
To do an extended register a SADB_X_EXT_EREG-extension is needed but I
am not sure about the contents of some fields in the structure.
Especcially about "sadb_x_ereg_len" and "sadb_x_ereg_exttype" in the
"sadb_x_ereg_t"-extension I am quite unsure. When I sent the
ereg-message filled like shown in the attachment. I don't even
get an error message and no <base-msg>+<supported> response either.
Attached you find the code and our logging output.
So maybe someone can give me a hint on this topic as the only
documentation I found is [1] and the not-very-easy to understand
source code of opensolaris.
Would be nice to hear from you?
Have a nice day!
Alex
// **************************************************************
// Extended Register of IKEv2 as km-application
// **************************************************************
int register_extended(int *pf_key_socket, int *msg_seq){
// Structure for Extended Register Message
struct complete_extended_msg_structure {
sadb_msg_t base_msg;
struct sadb_ext sadb_ext_1;
sadb_x_ereg_t extended_register_ext;
} extended_register_msg;
// Set Base-MSG attributes
extended_register_msg.base_msg.sadb_msg_version = PF_KEY_V2;
extended_register_msg.base_msg.sadb_msg_type = SADB_REGISTER;
extended_register_msg.base_msg.sadb_msg_errno = 0;
extended_register_msg.base_msg.sadb_msg_satype = 0; //Indicating
"extended register" with extension
extended_register_msg.base_msg.sadb_msg_len =
SADB_8TO64(sizeof(extended_register_msg)); //length in 64 Bit words
extended_register_msg.base_msg.sadb_msg_reserved = 0;
extended_register_msg.base_msg.sadb_x_msg_diagnostic=0;
syslog(LOG_ERR,"[PF_KEY:] Message Sequence Number = %d",*msg_seq);
extended_register_msg.base_msg.sadb_msg_seq = *msg_seq; //
For message originator
syslog(LOG_ERR,"[PF_KEY:] process_id() = %d",process_id());
extended_register_msg.base_msg.sadb_msg_pid = process_id();
*msg_seq++; //incr msg_seq
//*** Extension Header ***
extended_register_msg.sadb_ext_1.sadb_ext_len =
SADB_8TO64(sizeof(extended_register_msg.sadb_ext_1)+sizeof(extended_register_msg.extended_register_ext));
// sadb_ext_len Length of the extension header in 64 bit words, inclusive.
// syslog(LOG_ERR,"[PF_KEY:] Length in 64Bit: %d",
extended_register_msg.sadb_ext_1.sadb_ext_len);
extended_register_msg.sadb_ext_1.sadb_ext_type = SADB_X_EXT_EREG; //
sadb_ext_type The type of extension header that follows. Values for this field
are detailed later. The value zero is reserved.
// For the "extended REGISTER" which'll tell the kernel to send me
"extended ACQUIREs".
extended_register_msg.extended_register_ext.sadb_x_ereg_len =
SADB_8TO64(sizeof(extended_register_msg.extended_register_ext));
extended_register_msg.extended_register_ext.sadb_x_ereg_exttype =1; // ????
not SADB_X_EXT_EREG , because then it is duplicated /* X_EREG */
extended_register_msg.extended_register_ext.sadb_x_ereg_satypes[0] =
SADB_SATYPE_ESP; /* Array of SA types, 0-terminated. */
extended_register_msg.extended_register_ext.sadb_x_ereg_satypes[1] =
SADB_SATYPE_AH;
extended_register_msg.extended_register_ext.sadb_x_ereg_satypes[2] =
0;
extended_register_msg.extended_register_ext.sadb_x_ereg_satypes[3] =
0;
// Sending of Messaging to send_to_pf_key
unsigned char extended_register_msg_buffer[sizeof extended_register_msg];
// set up buffer
memcpy(extended_register_msg_buffer, &extended_register_msg,
sizeof(extended_register_msg)); // copy msg to buffer
syslog(LOG_ERR, "[PF_KEY:] Size of complete Extended-Register-MSG:
%d\n", sizeof(extended_register_msg_buffer));
if (send_to_pf_key(pf_key_socket, extended_register_msg_buffer,
sizeof(extended_register_msg_buffer))==1) return 1;
else {
syslog(LOG_ERR,"[PF_KEY:] Error while sending to PF_KEY\n");
return -1;
}// end of else
} // end of extended register
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 974359 user.error] [PF_KEY:]
*******************************************
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 383956 user.error] [PF_KEY:]
******PF_KEY_Init started******
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 881196 user.error] [PF_KEY:] Trying
to Register PF_KEY-Socket
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 407317 user.error] [PF_KEY:] In
create_pf_key_socket
Jul 31 16:03:32 cdc-ws23 keysock: [ID 890622 kern.notice] Entering keysock open.
Jul 31 16:03:32 cdc-ws23 keysock: [ID 364673 kern.notice] Made it into PF_KEY
socket open.
Jul 31 16:03:32 cdc-ws23 keysock: [ID 128252 kern.notice] In keysock_wput
Jul 31 16:03:32 cdc-ws23 keysock: [ID 294124 kern.notice] In default wput case
(131 30).
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 483935 user.error] [PF_KEY:] Return
from socket()
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 910495 user.error] [PF_KEY:] Socket
established
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 136443 user.error] [PF_KEY:] Socket
Number: 4
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 751522 user.error] [PF_KEY:] Message
Sequence Number = 0
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 260795 user.error] [PF_KEY:]
process_id() = 16163
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 424333 user.error] [PF_KEY:] Size of
complete Extended-Register-MSG: 32
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 646700 user.error] [PF_KEY:] Trying
to send MSG to PF_KEY
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 258275 user.error] [PF_KEY:] Size of
Message:32
Jul 31 16:03:32 cdc-ws23 keysock: [ID 128252 kern.notice] In keysock_wput
Jul 31 16:03:32 cdc-ws23 keysock: [ID 753741 kern.notice] T_DATA_REQ
Jul 31 16:03:32 cdc-ws23 keysock: [ID 187558 kern.notice] Received possible
PF_KEY message, type 7.
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 700652 user.error] [PF_KEY:]
Successfully sent to PF_KEY
Jul 31 16:03:32 cdc-ws23 a.out[16163]: [ID 405723 user.error] [PF_KEY:] Trying
to read from pf_key Socket
Jul 31 16:15:36 cdc-ws23 keysock: [ID 168569 kern.notice] Driver close, PF_KEY
socket is going away.
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code