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

Reply via email to