• Marco Angaroni's avatar
    ipvs: correct initial offset of Call-ID header search in SIP persistence engine · 7617a24f
    Marco Angaroni authored
    The IPVS SIP persistence engine is not able to parse the SIP header
    "Call-ID" when such header is inserted in the first positions of
    the SIP message.
    
    When IPVS is configured with "--pe sip" option, like for example:
    ipvsadm -A -u 1.2.3.4:5060 -s rr --pe sip -p 120 -o
    some particular messages (see below for details) do not create entries
    in the connection template table, which can be listed with:
    ipvsadm -Lcn --persistent-conn
    
    Problematic SIP messages are SIP responses having "Call-ID" header
    positioned just after message first line:
    SIP/2.0 200 OK
    [Call-ID header here]
    [rest of the headers]
    
    When "Call-ID" header is positioned down (after a few other headers)
    it is correctly recognized.
    
    This is due to the data offset used in get_callid function call inside
    ip_vs_pe_sip.c file: since dptr already points to the start of the
    SIP message, the value of dataoff should be initially 0.
    Otherwise the header is searched starting from some bytes after the
    first character of the SIP message.
    
    Fixes: 758ff033 ("IPVS: sip persistence engine")
    Signed-off-by: default avatarMarco Angaroni <marcoangaroni@gmail.com>
    Acked-by: default avatarJulian Anastasov <ja@ssi.bg>
    Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
    7617a24f
ip_vs_pe_sip.c 4.32 KB