linux/net/sctp/sm_make_chunk.c
<<
>>
Prefs
   1/* SCTP kernel implementation
   2 * (C) Copyright IBM Corp. 2001, 2004
   3 * Copyright (c) 1999-2000 Cisco, Inc.
   4 * Copyright (c) 1999-2001 Motorola, Inc.
   5 * Copyright (c) 2001-2002 Intel Corp.
   6 *
   7 * This file is part of the SCTP kernel implementation
   8 *
   9 * These functions work with the state functions in sctp_sm_statefuns.c
  10 * to implement the state operations.  These functions implement the
  11 * steps which require modifying existing data structures.
  12 *
  13 * This SCTP implementation is free software;
  14 * you can redistribute it and/or modify it under the terms of
  15 * the GNU General Public License as published by
  16 * the Free Software Foundation; either version 2, or (at your option)
  17 * any later version.
  18 *
  19 * This SCTP implementation is distributed in the hope that it
  20 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  21 *                 ************************
  22 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  23 * See the GNU General Public License for more details.
  24 *
  25 * You should have received a copy of the GNU General Public License
  26 * along with GNU CC; see the file COPYING.  If not, write to
  27 * the Free Software Foundation, 59 Temple Place - Suite 330,
  28 * Boston, MA 02111-1307, USA.
  29 *
  30 * Please send any bug reports or fixes you make to the
  31 * email address(es):
  32 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
  33 *
  34 * Or submit a bug report through the following website:
  35 *    http://www.sf.net/projects/lksctp
  36 *
  37 * Written or modified by:
  38 *    La Monte H.P. Yarroll <piggy@acm.org>
  39 *    Karl Knutson          <karl@athena.chicago.il.us>
  40 *    C. Robin              <chris@hundredacre.ac.uk>
  41 *    Jon Grimm             <jgrimm@us.ibm.com>
  42 *    Xingang Guo           <xingang.guo@intel.com>
  43 *    Dajiang Zhang         <dajiang.zhang@nokia.com>
  44 *    Sridhar Samudrala     <sri@us.ibm.com>
  45 *    Daisy Chang           <daisyc@us.ibm.com>
  46 *    Ardelle Fan           <ardelle.fan@intel.com>
  47 *    Kevin Gao             <kevin.gao@intel.com>
  48 *
  49 * Any bugs reported given to us we will try to fix... any fixes shared will
  50 * be incorporated into the next SCTP release.
  51 */
  52
  53#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  54
  55#include <linux/types.h>
  56#include <linux/kernel.h>
  57#include <linux/ip.h>
  58#include <linux/ipv6.h>
  59#include <linux/net.h>
  60#include <linux/inet.h>
  61#include <linux/scatterlist.h>
  62#include <linux/crypto.h>
  63#include <linux/slab.h>
  64#include <net/sock.h>
  65
  66#include <linux/skbuff.h>
  67#include <linux/random.h>       /* for get_random_bytes */
  68#include <net/sctp/sctp.h>
  69#include <net/sctp/sm.h>
  70
  71SCTP_STATIC
  72struct sctp_chunk *sctp_make_chunk(const struct sctp_association *asoc,
  73                                   __u8 type, __u8 flags, int paylen);
  74static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
  75                                        const struct sctp_association *asoc,
  76                                        const struct sctp_chunk *init_chunk,
  77                                        int *cookie_len,
  78                                        const __u8 *raw_addrs, int addrs_len);
  79static int sctp_process_param(struct sctp_association *asoc,
  80                              union sctp_params param,
  81                              const union sctp_addr *peer_addr,
  82                              gfp_t gfp);
  83static void *sctp_addto_param(struct sctp_chunk *chunk, int len,
  84                              const void *data);
  85
  86/* What was the inbound interface for this chunk? */
  87int sctp_chunk_iif(const struct sctp_chunk *chunk)
  88{
  89        struct sctp_af *af;
  90        int iif = 0;
  91
  92        af = sctp_get_af_specific(ipver2af(ip_hdr(chunk->skb)->version));
  93        if (af)
  94                iif = af->skb_iif(chunk->skb);
  95
  96        return iif;
  97}
  98
  99/* RFC 2960 3.3.2 Initiation (INIT) (1)
 100 *
 101 * Note 2: The ECN capable field is reserved for future use of
 102 * Explicit Congestion Notification.
 103 */
 104static const struct sctp_paramhdr ecap_param = {
 105        SCTP_PARAM_ECN_CAPABLE,
 106        cpu_to_be16(sizeof(struct sctp_paramhdr)),
 107};
 108static const struct sctp_paramhdr prsctp_param = {
 109        SCTP_PARAM_FWD_TSN_SUPPORT,
 110        cpu_to_be16(sizeof(struct sctp_paramhdr)),
 111};
 112
 113/* A helper to initialize an op error inside a
 114 * provided chunk, as most cause codes will be embedded inside an
 115 * abort chunk.
 116 */
 117void  sctp_init_cause(struct sctp_chunk *chunk, __be16 cause_code,
 118                      size_t paylen)
 119{
 120        sctp_errhdr_t err;
 121        __u16 len;
 122
 123        /* Cause code constants are now defined in network order.  */
 124        err.cause = cause_code;
 125        len = sizeof(sctp_errhdr_t) + paylen;
 126        err.length  = htons(len);
 127        chunk->subh.err_hdr = sctp_addto_chunk(chunk, sizeof(sctp_errhdr_t), &err);
 128}
 129
 130/* A helper to initialize an op error inside a
 131 * provided chunk, as most cause codes will be embedded inside an
 132 * abort chunk.  Differs from sctp_init_cause in that it won't oops
 133 * if there isn't enough space in the op error chunk
 134 */
 135static int sctp_init_cause_fixed(struct sctp_chunk *chunk, __be16 cause_code,
 136                      size_t paylen)
 137{
 138        sctp_errhdr_t err;
 139        __u16 len;
 140
 141        /* Cause code constants are now defined in network order.  */
 142        err.cause = cause_code;
 143        len = sizeof(sctp_errhdr_t) + paylen;
 144        err.length  = htons(len);
 145
 146        if (skb_tailroom(chunk->skb) < len)
 147                return -ENOSPC;
 148        chunk->subh.err_hdr = sctp_addto_chunk_fixed(chunk,
 149                                                     sizeof(sctp_errhdr_t),
 150                                                     &err);
 151        return 0;
 152}
 153/* 3.3.2 Initiation (INIT) (1)
 154 *
 155 * This chunk is used to initiate a SCTP association between two
 156 * endpoints. The format of the INIT chunk is shown below:
 157 *
 158 *     0                   1                   2                   3
 159 *     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 160 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 161 *    |   Type = 1    |  Chunk Flags  |      Chunk Length             |
 162 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 163 *    |                         Initiate Tag                          |
 164 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 165 *    |           Advertised Receiver Window Credit (a_rwnd)          |
 166 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 167 *    |  Number of Outbound Streams   |  Number of Inbound Streams    |
 168 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 169 *    |                          Initial TSN                          |
 170 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 171 *    \                                                               \
 172 *    /              Optional/Variable-Length Parameters              /
 173 *    \                                                               \
 174 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 175 *
 176 *
 177 * The INIT chunk contains the following parameters. Unless otherwise
 178 * noted, each parameter MUST only be included once in the INIT chunk.
 179 *
 180 * Fixed Parameters                     Status
 181 * ----------------------------------------------
 182 * Initiate Tag                        Mandatory
 183 * Advertised Receiver Window Credit   Mandatory
 184 * Number of Outbound Streams          Mandatory
 185 * Number of Inbound Streams           Mandatory
 186 * Initial TSN                         Mandatory
 187 *
 188 * Variable Parameters                  Status     Type Value
 189 * -------------------------------------------------------------
 190 * IPv4 Address (Note 1)               Optional    5
 191 * IPv6 Address (Note 1)               Optional    6
 192 * Cookie Preservative                 Optional    9
 193 * Reserved for ECN Capable (Note 2)   Optional    32768 (0x8000)
 194 * Host Name Address (Note 3)          Optional    11
 195 * Supported Address Types (Note 4)    Optional    12
 196 */
 197struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
 198                             const struct sctp_bind_addr *bp,
 199                             gfp_t gfp, int vparam_len)
 200{
 201        sctp_inithdr_t init;
 202        union sctp_params addrs;
 203        size_t chunksize;
 204        struct sctp_chunk *retval = NULL;
 205        int num_types, addrs_len = 0;
 206        struct sctp_sock *sp;
 207        sctp_supported_addrs_param_t sat;
 208        __be16 types[2];
 209        sctp_adaptation_ind_param_t aiparam;
 210        sctp_supported_ext_param_t ext_param;
 211        int num_ext = 0;
 212        __u8 extensions[3];
 213        sctp_paramhdr_t *auth_chunks = NULL,
 214                        *auth_hmacs = NULL;
 215
 216        /* RFC 2960 3.3.2 Initiation (INIT) (1)
 217         *
 218         * Note 1: The INIT chunks can contain multiple addresses that
 219         * can be IPv4 and/or IPv6 in any combination.
 220         */
 221        retval = NULL;
 222
 223        /* Convert the provided bind address list to raw format. */
 224        addrs = sctp_bind_addrs_to_raw(bp, &addrs_len, gfp);
 225
 226        init.init_tag              = htonl(asoc->c.my_vtag);
 227        init.a_rwnd                = htonl(asoc->rwnd);
 228        init.num_outbound_streams  = htons(asoc->c.sinit_num_ostreams);
 229        init.num_inbound_streams   = htons(asoc->c.sinit_max_instreams);
 230        init.initial_tsn           = htonl(asoc->c.initial_tsn);
 231
 232        /* How many address types are needed? */
 233        sp = sctp_sk(asoc->base.sk);
 234        num_types = sp->pf->supported_addrs(sp, types);
 235
 236        chunksize = sizeof(init) + addrs_len;
 237        chunksize += WORD_ROUND(SCTP_SAT_LEN(num_types));
 238        chunksize += sizeof(ecap_param);
 239
 240        if (sctp_prsctp_enable)
 241                chunksize += sizeof(prsctp_param);
 242
 243        /* ADDIP: Section 4.2.7:
 244         *  An implementation supporting this extension [ADDIP] MUST list
 245         *  the ASCONF,the ASCONF-ACK, and the AUTH  chunks in its INIT and
 246         *  INIT-ACK parameters.
 247         */
 248        if (sctp_addip_enable) {
 249                extensions[num_ext] = SCTP_CID_ASCONF;
 250                extensions[num_ext+1] = SCTP_CID_ASCONF_ACK;
 251                num_ext += 2;
 252        }
 253
 254        if (sp->adaptation_ind)
 255                chunksize += sizeof(aiparam);
 256
 257        chunksize += vparam_len;
 258
 259        /* Account for AUTH related parameters */
 260        if (sctp_auth_enable) {
 261                /* Add random parameter length*/
 262                chunksize += sizeof(asoc->c.auth_random);
 263
 264                /* Add HMACS parameter length if any were defined */
 265                auth_hmacs = (sctp_paramhdr_t *)asoc->c.auth_hmacs;
 266                if (auth_hmacs->length)
 267                        chunksize += WORD_ROUND(ntohs(auth_hmacs->length));
 268                else
 269                        auth_hmacs = NULL;
 270
 271                /* Add CHUNKS parameter length */
 272                auth_chunks = (sctp_paramhdr_t *)asoc->c.auth_chunks;
 273                if (auth_chunks->length)
 274                        chunksize += WORD_ROUND(ntohs(auth_chunks->length));
 275                else
 276                        auth_chunks = NULL;
 277
 278                extensions[num_ext] = SCTP_CID_AUTH;
 279                num_ext += 1;
 280        }
 281
 282        /* If we have any extensions to report, account for that */
 283        if (num_ext)
 284                chunksize += WORD_ROUND(sizeof(sctp_supported_ext_param_t) +
 285                                        num_ext);
 286
 287        /* RFC 2960 3.3.2 Initiation (INIT) (1)
 288         *
 289         * Note 3: An INIT chunk MUST NOT contain more than one Host
 290         * Name address parameter. Moreover, the sender of the INIT
 291         * MUST NOT combine any other address types with the Host Name
 292         * address in the INIT. The receiver of INIT MUST ignore any
 293         * other address types if the Host Name address parameter is
 294         * present in the received INIT chunk.
 295         *
 296         * PLEASE DO NOT FIXME [This version does not support Host Name.]
 297         */
 298
 299        retval = sctp_make_chunk(asoc, SCTP_CID_INIT, 0, chunksize);
 300        if (!retval)
 301                goto nodata;
 302
 303        retval->subh.init_hdr =
 304                sctp_addto_chunk(retval, sizeof(init), &init);
 305        retval->param_hdr.v =
 306                sctp_addto_chunk(retval, addrs_len, addrs.v);
 307
 308        /* RFC 2960 3.3.2 Initiation (INIT) (1)
 309         *
 310         * Note 4: This parameter, when present, specifies all the
 311         * address types the sending endpoint can support. The absence
 312         * of this parameter indicates that the sending endpoint can
 313         * support any address type.
 314         */
 315        sat.param_hdr.type = SCTP_PARAM_SUPPORTED_ADDRESS_TYPES;
 316        sat.param_hdr.length = htons(SCTP_SAT_LEN(num_types));
 317        sctp_addto_chunk(retval, sizeof(sat), &sat);
 318        sctp_addto_chunk(retval, num_types * sizeof(__u16), &types);
 319
 320        sctp_addto_chunk(retval, sizeof(ecap_param), &ecap_param);
 321
 322        /* Add the supported extensions parameter.  Be nice and add this
 323         * fist before addiding the parameters for the extensions themselves
 324         */
 325        if (num_ext) {
 326                ext_param.param_hdr.type = SCTP_PARAM_SUPPORTED_EXT;
 327                ext_param.param_hdr.length =
 328                            htons(sizeof(sctp_supported_ext_param_t) + num_ext);
 329                sctp_addto_chunk(retval, sizeof(sctp_supported_ext_param_t),
 330                                &ext_param);
 331                sctp_addto_param(retval, num_ext, extensions);
 332        }
 333
 334        if (sctp_prsctp_enable)
 335                sctp_addto_chunk(retval, sizeof(prsctp_param), &prsctp_param);
 336
 337        if (sp->adaptation_ind) {
 338                aiparam.param_hdr.type = SCTP_PARAM_ADAPTATION_LAYER_IND;
 339                aiparam.param_hdr.length = htons(sizeof(aiparam));
 340                aiparam.adaptation_ind = htonl(sp->adaptation_ind);
 341                sctp_addto_chunk(retval, sizeof(aiparam), &aiparam);
 342        }
 343
 344        /* Add SCTP-AUTH chunks to the parameter list */
 345        if (sctp_auth_enable) {
 346                sctp_addto_chunk(retval, sizeof(asoc->c.auth_random),
 347                                 asoc->c.auth_random);
 348                if (auth_hmacs)
 349                        sctp_addto_chunk(retval, ntohs(auth_hmacs->length),
 350                                        auth_hmacs);
 351                if (auth_chunks)
 352                        sctp_addto_chunk(retval, ntohs(auth_chunks->length),
 353                                        auth_chunks);
 354        }
 355nodata:
 356        kfree(addrs.v);
 357        return retval;
 358}
 359
 360struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
 361                                 const struct sctp_chunk *chunk,
 362                                 gfp_t gfp, int unkparam_len)
 363{
 364        sctp_inithdr_t initack;
 365        struct sctp_chunk *retval;
 366        union sctp_params addrs;
 367        struct sctp_sock *sp;
 368        int addrs_len;
 369        sctp_cookie_param_t *cookie;
 370        int cookie_len;
 371        size_t chunksize;
 372        sctp_adaptation_ind_param_t aiparam;
 373        sctp_supported_ext_param_t ext_param;
 374        int num_ext = 0;
 375        __u8 extensions[3];
 376        sctp_paramhdr_t *auth_chunks = NULL,
 377                        *auth_hmacs = NULL,
 378                        *auth_random = NULL;
 379
 380        retval = NULL;
 381
 382        /* Note: there may be no addresses to embed. */
 383        addrs = sctp_bind_addrs_to_raw(&asoc->base.bind_addr, &addrs_len, gfp);
 384
 385        initack.init_tag                = htonl(asoc->c.my_vtag);
 386        initack.a_rwnd                  = htonl(asoc->rwnd);
 387        initack.num_outbound_streams    = htons(asoc->c.sinit_num_ostreams);
 388        initack.num_inbound_streams     = htons(asoc->c.sinit_max_instreams);
 389        initack.initial_tsn             = htonl(asoc->c.initial_tsn);
 390
 391        /* FIXME:  We really ought to build the cookie right
 392         * into the packet instead of allocating more fresh memory.
 393         */
 394        cookie = sctp_pack_cookie(asoc->ep, asoc, chunk, &cookie_len,
 395                                  addrs.v, addrs_len);
 396        if (!cookie)
 397                goto nomem_cookie;
 398
 399        /* Calculate the total size of allocation, include the reserved
 400         * space for reporting unknown parameters if it is specified.
 401         */
 402        sp = sctp_sk(asoc->base.sk);
 403        chunksize = sizeof(initack) + addrs_len + cookie_len + unkparam_len;
 404
 405        /* Tell peer that we'll do ECN only if peer advertised such cap.  */
 406        if (asoc->peer.ecn_capable)
 407                chunksize += sizeof(ecap_param);
 408
 409        if (asoc->peer.prsctp_capable)
 410                chunksize += sizeof(prsctp_param);
 411
 412        if (asoc->peer.asconf_capable) {
 413                extensions[num_ext] = SCTP_CID_ASCONF;
 414                extensions[num_ext+1] = SCTP_CID_ASCONF_ACK;
 415                num_ext += 2;
 416        }
 417
 418        if (sp->adaptation_ind)
 419                chunksize += sizeof(aiparam);
 420
 421        if (asoc->peer.auth_capable) {
 422                auth_random = (sctp_paramhdr_t *)asoc->c.auth_random;
 423                chunksize += ntohs(auth_random->length);
 424
 425                auth_hmacs = (sctp_paramhdr_t *)asoc->c.auth_hmacs;
 426                if (auth_hmacs->length)
 427                        chunksize += WORD_ROUND(ntohs(auth_hmacs->length));
 428                else
 429                        auth_hmacs = NULL;
 430
 431                auth_chunks = (sctp_paramhdr_t *)asoc->c.auth_chunks;
 432                if (auth_chunks->length)
 433                        chunksize += WORD_ROUND(ntohs(auth_chunks->length));
 434                else
 435                        auth_chunks = NULL;
 436
 437                extensions[num_ext] = SCTP_CID_AUTH;
 438                num_ext += 1;
 439        }
 440
 441        if (num_ext)
 442                chunksize += WORD_ROUND(sizeof(sctp_supported_ext_param_t) +
 443                                        num_ext);
 444
 445        /* Now allocate and fill out the chunk.  */
 446        retval = sctp_make_chunk(asoc, SCTP_CID_INIT_ACK, 0, chunksize);
 447        if (!retval)
 448                goto nomem_chunk;
 449
 450        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 451         *
 452         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 453         * HEARTBEAT ACK, * etc.) to the same destination transport
 454         * address from which it received the DATA or control chunk
 455         * to which it is replying.
 456         *
 457         * [INIT ACK back to where the INIT came from.]
 458         */
 459        retval->transport = chunk->transport;
 460
 461        retval->subh.init_hdr =
 462                sctp_addto_chunk(retval, sizeof(initack), &initack);
 463        retval->param_hdr.v = sctp_addto_chunk(retval, addrs_len, addrs.v);
 464        sctp_addto_chunk(retval, cookie_len, cookie);
 465        if (asoc->peer.ecn_capable)
 466                sctp_addto_chunk(retval, sizeof(ecap_param), &ecap_param);
 467        if (num_ext) {
 468                ext_param.param_hdr.type = SCTP_PARAM_SUPPORTED_EXT;
 469                ext_param.param_hdr.length =
 470                            htons(sizeof(sctp_supported_ext_param_t) + num_ext);
 471                sctp_addto_chunk(retval, sizeof(sctp_supported_ext_param_t),
 472                                 &ext_param);
 473                sctp_addto_param(retval, num_ext, extensions);
 474        }
 475        if (asoc->peer.prsctp_capable)
 476                sctp_addto_chunk(retval, sizeof(prsctp_param), &prsctp_param);
 477
 478        if (sp->adaptation_ind) {
 479                aiparam.param_hdr.type = SCTP_PARAM_ADAPTATION_LAYER_IND;
 480                aiparam.param_hdr.length = htons(sizeof(aiparam));
 481                aiparam.adaptation_ind = htonl(sp->adaptation_ind);
 482                sctp_addto_chunk(retval, sizeof(aiparam), &aiparam);
 483        }
 484
 485        if (asoc->peer.auth_capable) {
 486                sctp_addto_chunk(retval, ntohs(auth_random->length),
 487                                 auth_random);
 488                if (auth_hmacs)
 489                        sctp_addto_chunk(retval, ntohs(auth_hmacs->length),
 490                                        auth_hmacs);
 491                if (auth_chunks)
 492                        sctp_addto_chunk(retval, ntohs(auth_chunks->length),
 493                                        auth_chunks);
 494        }
 495
 496        /* We need to remove the const qualifier at this point.  */
 497        retval->asoc = (struct sctp_association *) asoc;
 498
 499nomem_chunk:
 500        kfree(cookie);
 501nomem_cookie:
 502        kfree(addrs.v);
 503        return retval;
 504}
 505
 506/* 3.3.11 Cookie Echo (COOKIE ECHO) (10):
 507 *
 508 * This chunk is used only during the initialization of an association.
 509 * It is sent by the initiator of an association to its peer to complete
 510 * the initialization process. This chunk MUST precede any DATA chunk
 511 * sent within the association, but MAY be bundled with one or more DATA
 512 * chunks in the same packet.
 513 *
 514 *      0                   1                   2                   3
 515 *      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 516 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 517 *     |   Type = 10   |Chunk  Flags   |         Length                |
 518 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 519 *     /                     Cookie                                    /
 520 *     \                                                               \
 521 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 522 *
 523 * Chunk Flags: 8 bit
 524 *
 525 *   Set to zero on transmit and ignored on receipt.
 526 *
 527 * Length: 16 bits (unsigned integer)
 528 *
 529 *   Set to the size of the chunk in bytes, including the 4 bytes of
 530 *   the chunk header and the size of the Cookie.
 531 *
 532 * Cookie: variable size
 533 *
 534 *   This field must contain the exact cookie received in the
 535 *   State Cookie parameter from the previous INIT ACK.
 536 *
 537 *   An implementation SHOULD make the cookie as small as possible
 538 *   to insure interoperability.
 539 */
 540struct sctp_chunk *sctp_make_cookie_echo(const struct sctp_association *asoc,
 541                                    const struct sctp_chunk *chunk)
 542{
 543        struct sctp_chunk *retval;
 544        void *cookie;
 545        int cookie_len;
 546
 547        cookie = asoc->peer.cookie;
 548        cookie_len = asoc->peer.cookie_len;
 549
 550        /* Build a cookie echo chunk.  */
 551        retval = sctp_make_chunk(asoc, SCTP_CID_COOKIE_ECHO, 0, cookie_len);
 552        if (!retval)
 553                goto nodata;
 554        retval->subh.cookie_hdr =
 555                sctp_addto_chunk(retval, cookie_len, cookie);
 556
 557        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 558         *
 559         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 560         * HEARTBEAT ACK, * etc.) to the same destination transport
 561         * address from which it * received the DATA or control chunk
 562         * to which it is replying.
 563         *
 564         * [COOKIE ECHO back to where the INIT ACK came from.]
 565         */
 566        if (chunk)
 567                retval->transport = chunk->transport;
 568
 569nodata:
 570        return retval;
 571}
 572
 573/* 3.3.12 Cookie Acknowledgement (COOKIE ACK) (11):
 574 *
 575 * This chunk is used only during the initialization of an
 576 * association.  It is used to acknowledge the receipt of a COOKIE
 577 * ECHO chunk.  This chunk MUST precede any DATA or SACK chunk sent
 578 * within the association, but MAY be bundled with one or more DATA
 579 * chunks or SACK chunk in the same SCTP packet.
 580 *
 581 *      0                   1                   2                   3
 582 *      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 583 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 584 *     |   Type = 11   |Chunk  Flags   |     Length = 4                |
 585 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 586 *
 587 * Chunk Flags: 8 bits
 588 *
 589 *   Set to zero on transmit and ignored on receipt.
 590 */
 591struct sctp_chunk *sctp_make_cookie_ack(const struct sctp_association *asoc,
 592                                   const struct sctp_chunk *chunk)
 593{
 594        struct sctp_chunk *retval;
 595
 596        retval = sctp_make_chunk(asoc, SCTP_CID_COOKIE_ACK, 0, 0);
 597
 598        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 599         *
 600         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 601         * HEARTBEAT ACK, * etc.) to the same destination transport
 602         * address from which it * received the DATA or control chunk
 603         * to which it is replying.
 604         *
 605         * [COOKIE ACK back to where the COOKIE ECHO came from.]
 606         */
 607        if (retval && chunk)
 608                retval->transport = chunk->transport;
 609
 610        return retval;
 611}
 612
 613/*
 614 *  Appendix A: Explicit Congestion Notification:
 615 *  CWR:
 616 *
 617 *  RFC 2481 details a specific bit for a sender to send in the header of
 618 *  its next outbound TCP segment to indicate to its peer that it has
 619 *  reduced its congestion window.  This is termed the CWR bit.  For
 620 *  SCTP the same indication is made by including the CWR chunk.
 621 *  This chunk contains one data element, i.e. the TSN number that
 622 *  was sent in the ECNE chunk.  This element represents the lowest
 623 *  TSN number in the datagram that was originally marked with the
 624 *  CE bit.
 625 *
 626 *     0                   1                   2                   3
 627 *     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 628 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 629 *    | Chunk Type=13 | Flags=00000000|    Chunk Length = 8           |
 630 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 631 *    |                      Lowest TSN Number                        |
 632 *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 633 *
 634 *     Note: The CWR is considered a Control chunk.
 635 */
 636struct sctp_chunk *sctp_make_cwr(const struct sctp_association *asoc,
 637                            const __u32 lowest_tsn,
 638                            const struct sctp_chunk *chunk)
 639{
 640        struct sctp_chunk *retval;
 641        sctp_cwrhdr_t cwr;
 642
 643        cwr.lowest_tsn = htonl(lowest_tsn);
 644        retval = sctp_make_chunk(asoc, SCTP_CID_ECN_CWR, 0,
 645                                 sizeof(sctp_cwrhdr_t));
 646
 647        if (!retval)
 648                goto nodata;
 649
 650        retval->subh.ecn_cwr_hdr =
 651                sctp_addto_chunk(retval, sizeof(cwr), &cwr);
 652
 653        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 654         *
 655         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 656         * HEARTBEAT ACK, * etc.) to the same destination transport
 657         * address from which it * received the DATA or control chunk
 658         * to which it is replying.
 659         *
 660         * [Report a reduced congestion window back to where the ECNE
 661         * came from.]
 662         */
 663        if (chunk)
 664                retval->transport = chunk->transport;
 665
 666nodata:
 667        return retval;
 668}
 669
 670/* Make an ECNE chunk.  This is a congestion experienced report.  */
 671struct sctp_chunk *sctp_make_ecne(const struct sctp_association *asoc,
 672                             const __u32 lowest_tsn)
 673{
 674        struct sctp_chunk *retval;
 675        sctp_ecnehdr_t ecne;
 676
 677        ecne.lowest_tsn = htonl(lowest_tsn);
 678        retval = sctp_make_chunk(asoc, SCTP_CID_ECN_ECNE, 0,
 679                                 sizeof(sctp_ecnehdr_t));
 680        if (!retval)
 681                goto nodata;
 682        retval->subh.ecne_hdr =
 683                sctp_addto_chunk(retval, sizeof(ecne), &ecne);
 684
 685nodata:
 686        return retval;
 687}
 688
 689/* Make a DATA chunk for the given association from the provided
 690 * parameters.  However, do not populate the data payload.
 691 */
 692struct sctp_chunk *sctp_make_datafrag_empty(struct sctp_association *asoc,
 693                                       const struct sctp_sndrcvinfo *sinfo,
 694                                       int data_len, __u8 flags, __u16 ssn)
 695{
 696        struct sctp_chunk *retval;
 697        struct sctp_datahdr dp;
 698        int chunk_len;
 699
 700        /* We assign the TSN as LATE as possible, not here when
 701         * creating the chunk.
 702         */
 703        dp.tsn = 0;
 704        dp.stream = htons(sinfo->sinfo_stream);
 705        dp.ppid   = sinfo->sinfo_ppid;
 706
 707        /* Set the flags for an unordered send.  */
 708        if (sinfo->sinfo_flags & SCTP_UNORDERED) {
 709                flags |= SCTP_DATA_UNORDERED;
 710                dp.ssn = 0;
 711        } else
 712                dp.ssn = htons(ssn);
 713
 714        chunk_len = sizeof(dp) + data_len;
 715        retval = sctp_make_chunk(asoc, SCTP_CID_DATA, flags, chunk_len);
 716        if (!retval)
 717                goto nodata;
 718
 719        retval->subh.data_hdr = sctp_addto_chunk(retval, sizeof(dp), &dp);
 720        memcpy(&retval->sinfo, sinfo, sizeof(struct sctp_sndrcvinfo));
 721
 722nodata:
 723        return retval;
 724}
 725
 726/* Create a selective ackowledgement (SACK) for the given
 727 * association.  This reports on which TSN's we've seen to date,
 728 * including duplicates and gaps.
 729 */
 730struct sctp_chunk *sctp_make_sack(const struct sctp_association *asoc)
 731{
 732        struct sctp_chunk *retval;
 733        struct sctp_sackhdr sack;
 734        int len;
 735        __u32 ctsn;
 736        __u16 num_gabs, num_dup_tsns;
 737        struct sctp_association *aptr = (struct sctp_association *)asoc;
 738        struct sctp_tsnmap *map = (struct sctp_tsnmap *)&asoc->peer.tsn_map;
 739        struct sctp_gap_ack_block gabs[SCTP_MAX_GABS];
 740        struct sctp_transport *trans;
 741
 742        memset(gabs, 0, sizeof(gabs));
 743        ctsn = sctp_tsnmap_get_ctsn(map);
 744        SCTP_DEBUG_PRINTK("sackCTSNAck sent:  0x%x.\n", ctsn);
 745
 746        /* How much room is needed in the chunk? */
 747        num_gabs = sctp_tsnmap_num_gabs(map, gabs);
 748        num_dup_tsns = sctp_tsnmap_num_dups(map);
 749
 750        /* Initialize the SACK header.  */
 751        sack.cum_tsn_ack            = htonl(ctsn);
 752        sack.a_rwnd                 = htonl(asoc->a_rwnd);
 753        sack.num_gap_ack_blocks     = htons(num_gabs);
 754        sack.num_dup_tsns           = htons(num_dup_tsns);
 755
 756        len = sizeof(sack)
 757                + sizeof(struct sctp_gap_ack_block) * num_gabs
 758                + sizeof(__u32) * num_dup_tsns;
 759
 760        /* Create the chunk.  */
 761        retval = sctp_make_chunk(asoc, SCTP_CID_SACK, 0, len);
 762        if (!retval)
 763                goto nodata;
 764
 765        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 766         *
 767         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 768         * HEARTBEAT ACK, etc.) to the same destination transport
 769         * address from which it received the DATA or control chunk to
 770         * which it is replying.  This rule should also be followed if
 771         * the endpoint is bundling DATA chunks together with the
 772         * reply chunk.
 773         *
 774         * However, when acknowledging multiple DATA chunks received
 775         * in packets from different source addresses in a single
 776         * SACK, the SACK chunk may be transmitted to one of the
 777         * destination transport addresses from which the DATA or
 778         * control chunks being acknowledged were received.
 779         *
 780         * [BUG:  We do not implement the following paragraph.
 781         * Perhaps we should remember the last transport we used for a
 782         * SACK and avoid that (if possible) if we have seen any
 783         * duplicates. --piggy]
 784         *
 785         * When a receiver of a duplicate DATA chunk sends a SACK to a
 786         * multi- homed endpoint it MAY be beneficial to vary the
 787         * destination address and not use the source address of the
 788         * DATA chunk.  The reason being that receiving a duplicate
 789         * from a multi-homed endpoint might indicate that the return
 790         * path (as specified in the source address of the DATA chunk)
 791         * for the SACK is broken.
 792         *
 793         * [Send to the address from which we last received a DATA chunk.]
 794         */
 795        retval->transport = asoc->peer.last_data_from;
 796
 797        retval->subh.sack_hdr =
 798                sctp_addto_chunk(retval, sizeof(sack), &sack);
 799
 800        /* Add the gap ack block information.   */
 801        if (num_gabs)
 802                sctp_addto_chunk(retval, sizeof(__u32) * num_gabs,
 803                                 gabs);
 804
 805        /* Add the duplicate TSN information.  */
 806        if (num_dup_tsns)
 807                sctp_addto_chunk(retval, sizeof(__u32) * num_dup_tsns,
 808                                 sctp_tsnmap_get_dups(map));
 809
 810        /* Once we have a sack generated, check to see what our sack
 811         * generation is, if its 0, reset the transports to 0, and reset
 812         * the association generation to 1
 813         *
 814         * The idea is that zero is never used as a valid generation for the
 815         * association so no transport will match after a wrap event like this,
 816         * Until the next sack
 817         */
 818        if (++aptr->peer.sack_generation == 0) {
 819                list_for_each_entry(trans, &asoc->peer.transport_addr_list,
 820                                    transports)
 821                        trans->sack_generation = 0;
 822                aptr->peer.sack_generation = 1;
 823        }
 824nodata:
 825        return retval;
 826}
 827
 828/* Make a SHUTDOWN chunk. */
 829struct sctp_chunk *sctp_make_shutdown(const struct sctp_association *asoc,
 830                                      const struct sctp_chunk *chunk)
 831{
 832        struct sctp_chunk *retval;
 833        sctp_shutdownhdr_t shut;
 834        __u32 ctsn;
 835
 836        ctsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map);
 837        shut.cum_tsn_ack = htonl(ctsn);
 838
 839        retval = sctp_make_chunk(asoc, SCTP_CID_SHUTDOWN, 0,
 840                                 sizeof(sctp_shutdownhdr_t));
 841        if (!retval)
 842                goto nodata;
 843
 844        retval->subh.shutdown_hdr =
 845                sctp_addto_chunk(retval, sizeof(shut), &shut);
 846
 847        if (chunk)
 848                retval->transport = chunk->transport;
 849nodata:
 850        return retval;
 851}
 852
 853struct sctp_chunk *sctp_make_shutdown_ack(const struct sctp_association *asoc,
 854                                     const struct sctp_chunk *chunk)
 855{
 856        struct sctp_chunk *retval;
 857
 858        retval = sctp_make_chunk(asoc, SCTP_CID_SHUTDOWN_ACK, 0, 0);
 859
 860        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 861         *
 862         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 863         * HEARTBEAT ACK, * etc.) to the same destination transport
 864         * address from which it * received the DATA or control chunk
 865         * to which it is replying.
 866         *
 867         * [ACK back to where the SHUTDOWN came from.]
 868         */
 869        if (retval && chunk)
 870                retval->transport = chunk->transport;
 871
 872        return retval;
 873}
 874
 875struct sctp_chunk *sctp_make_shutdown_complete(
 876        const struct sctp_association *asoc,
 877        const struct sctp_chunk *chunk)
 878{
 879        struct sctp_chunk *retval;
 880        __u8 flags = 0;
 881
 882        /* Set the T-bit if we have no association (vtag will be
 883         * reflected)
 884         */
 885        flags |= asoc ? 0 : SCTP_CHUNK_FLAG_T;
 886
 887        retval = sctp_make_chunk(asoc, SCTP_CID_SHUTDOWN_COMPLETE, flags, 0);
 888
 889        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 890         *
 891         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 892         * HEARTBEAT ACK, * etc.) to the same destination transport
 893         * address from which it * received the DATA or control chunk
 894         * to which it is replying.
 895         *
 896         * [Report SHUTDOWN COMPLETE back to where the SHUTDOWN ACK
 897         * came from.]
 898         */
 899        if (retval && chunk)
 900                retval->transport = chunk->transport;
 901
 902        return retval;
 903}
 904
 905/* Create an ABORT.  Note that we set the T bit if we have no
 906 * association, except when responding to an INIT (sctpimpguide 2.41).
 907 */
 908struct sctp_chunk *sctp_make_abort(const struct sctp_association *asoc,
 909                              const struct sctp_chunk *chunk,
 910                              const size_t hint)
 911{
 912        struct sctp_chunk *retval;
 913        __u8 flags = 0;
 914
 915        /* Set the T-bit if we have no association and 'chunk' is not
 916         * an INIT (vtag will be reflected).
 917         */
 918        if (!asoc) {
 919                if (chunk && chunk->chunk_hdr &&
 920                    chunk->chunk_hdr->type == SCTP_CID_INIT)
 921                        flags = 0;
 922                else
 923                        flags = SCTP_CHUNK_FLAG_T;
 924        }
 925
 926        retval = sctp_make_chunk(asoc, SCTP_CID_ABORT, flags, hint);
 927
 928        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 929         *
 930         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 931         * HEARTBEAT ACK, * etc.) to the same destination transport
 932         * address from which it * received the DATA or control chunk
 933         * to which it is replying.
 934         *
 935         * [ABORT back to where the offender came from.]
 936         */
 937        if (retval && chunk)
 938                retval->transport = chunk->transport;
 939
 940        return retval;
 941}
 942
 943/* Helper to create ABORT with a NO_USER_DATA error.  */
 944struct sctp_chunk *sctp_make_abort_no_data(
 945        const struct sctp_association *asoc,
 946        const struct sctp_chunk *chunk, __u32 tsn)
 947{
 948        struct sctp_chunk *retval;
 949        __be32 payload;
 950
 951        retval = sctp_make_abort(asoc, chunk, sizeof(sctp_errhdr_t)
 952                                 + sizeof(tsn));
 953
 954        if (!retval)
 955                goto no_mem;
 956
 957        /* Put the tsn back into network byte order.  */
 958        payload = htonl(tsn);
 959        sctp_init_cause(retval, SCTP_ERROR_NO_DATA, sizeof(payload));
 960        sctp_addto_chunk(retval, sizeof(payload), (const void *)&payload);
 961
 962        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
 963         *
 964         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
 965         * HEARTBEAT ACK, * etc.) to the same destination transport
 966         * address from which it * received the DATA or control chunk
 967         * to which it is replying.
 968         *
 969         * [ABORT back to where the offender came from.]
 970         */
 971        if (chunk)
 972                retval->transport = chunk->transport;
 973
 974no_mem:
 975        return retval;
 976}
 977
 978/* Helper to create ABORT with a SCTP_ERROR_USER_ABORT error.  */
 979struct sctp_chunk *sctp_make_abort_user(const struct sctp_association *asoc,
 980                                        const struct msghdr *msg,
 981                                        size_t paylen)
 982{
 983        struct sctp_chunk *retval;
 984        void *payload = NULL;
 985        int err;
 986
 987        retval = sctp_make_abort(asoc, NULL, sizeof(sctp_errhdr_t) + paylen);
 988        if (!retval)
 989                goto err_chunk;
 990
 991        if (paylen) {
 992                /* Put the msg_iov together into payload.  */
 993                payload = kmalloc(paylen, GFP_KERNEL);
 994                if (!payload)
 995                        goto err_payload;
 996
 997                err = memcpy_fromiovec(payload, msg->msg_iov, paylen);
 998                if (err < 0)
 999                        goto err_copy;
1000        }
1001
1002        sctp_init_cause(retval, SCTP_ERROR_USER_ABORT, paylen);
1003        sctp_addto_chunk(retval, paylen, payload);
1004
1005        if (paylen)
1006                kfree(payload);
1007
1008        return retval;
1009
1010err_copy:
1011        kfree(payload);
1012err_payload:
1013        sctp_chunk_free(retval);
1014        retval = NULL;
1015err_chunk:
1016        return retval;
1017}
1018
1019/* Append bytes to the end of a parameter.  Will panic if chunk is not big
1020 * enough.
1021 */
1022static void *sctp_addto_param(struct sctp_chunk *chunk, int len,
1023                              const void *data)
1024{
1025        void *target;
1026        int chunklen = ntohs(chunk->chunk_hdr->length);
1027
1028        target = skb_put(chunk->skb, len);
1029
1030        if (data)
1031                memcpy(target, data, len);
1032        else
1033                memset(target, 0, len);
1034
1035        /* Adjust the chunk length field.  */
1036        chunk->chunk_hdr->length = htons(chunklen + len);
1037        chunk->chunk_end = skb_tail_pointer(chunk->skb);
1038
1039        return target;
1040}
1041
1042/* Make an ABORT chunk with a PROTOCOL VIOLATION cause code. */
1043struct sctp_chunk *sctp_make_abort_violation(
1044        const struct sctp_association *asoc,
1045        const struct sctp_chunk *chunk,
1046        const __u8   *payload,
1047        const size_t paylen)
1048{
1049        struct sctp_chunk  *retval;
1050        struct sctp_paramhdr phdr;
1051
1052        retval = sctp_make_abort(asoc, chunk, sizeof(sctp_errhdr_t) + paylen
1053                                        + sizeof(sctp_paramhdr_t));
1054        if (!retval)
1055                goto end;
1056
1057        sctp_init_cause(retval, SCTP_ERROR_PROTO_VIOLATION, paylen
1058                                        + sizeof(sctp_paramhdr_t));
1059
1060        phdr.type = htons(chunk->chunk_hdr->type);
1061        phdr.length = chunk->chunk_hdr->length;
1062        sctp_addto_chunk(retval, paylen, payload);
1063        sctp_addto_param(retval, sizeof(sctp_paramhdr_t), &phdr);
1064
1065end:
1066        return retval;
1067}
1068
1069struct sctp_chunk *sctp_make_violation_paramlen(
1070        const struct sctp_association *asoc,
1071        const struct sctp_chunk *chunk,
1072        struct sctp_paramhdr *param)
1073{
1074        struct sctp_chunk *retval;
1075        static const char error[] = "The following parameter had invalid length:";
1076        size_t payload_len = sizeof(error) + sizeof(sctp_errhdr_t) +
1077                                sizeof(sctp_paramhdr_t);
1078
1079        retval = sctp_make_abort(asoc, chunk, payload_len);
1080        if (!retval)
1081                goto nodata;
1082
1083        sctp_init_cause(retval, SCTP_ERROR_PROTO_VIOLATION,
1084                        sizeof(error) + sizeof(sctp_paramhdr_t));
1085        sctp_addto_chunk(retval, sizeof(error), error);
1086        sctp_addto_param(retval, sizeof(sctp_paramhdr_t), param);
1087
1088nodata:
1089        return retval;
1090}
1091
1092/* Make a HEARTBEAT chunk.  */
1093struct sctp_chunk *sctp_make_heartbeat(const struct sctp_association *asoc,
1094                                  const struct sctp_transport *transport)
1095{
1096        struct sctp_chunk *retval;
1097        sctp_sender_hb_info_t hbinfo;
1098
1099        retval = sctp_make_chunk(asoc, SCTP_CID_HEARTBEAT, 0, sizeof(hbinfo));
1100
1101        if (!retval)
1102                goto nodata;
1103
1104        hbinfo.param_hdr.type = SCTP_PARAM_HEARTBEAT_INFO;
1105        hbinfo.param_hdr.length = htons(sizeof(sctp_sender_hb_info_t));
1106        hbinfo.daddr = transport->ipaddr;
1107        hbinfo.sent_at = jiffies;
1108        hbinfo.hb_nonce = transport->hb_nonce;
1109
1110        /* Cast away the 'const', as this is just telling the chunk
1111         * what transport it belongs to.
1112         */
1113        retval->transport = (struct sctp_transport *) transport;
1114        retval->subh.hbs_hdr = sctp_addto_chunk(retval, sizeof(hbinfo),
1115                                                &hbinfo);
1116
1117nodata:
1118        return retval;
1119}
1120
1121struct sctp_chunk *sctp_make_heartbeat_ack(const struct sctp_association *asoc,
1122                                      const struct sctp_chunk *chunk,
1123                                      const void *payload, const size_t paylen)
1124{
1125        struct sctp_chunk *retval;
1126
1127        retval  = sctp_make_chunk(asoc, SCTP_CID_HEARTBEAT_ACK, 0, paylen);
1128        if (!retval)
1129                goto nodata;
1130
1131        retval->subh.hbs_hdr = sctp_addto_chunk(retval, paylen, payload);
1132
1133        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
1134         *
1135         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
1136         * HEARTBEAT ACK, * etc.) to the same destination transport
1137         * address from which it * received the DATA or control chunk
1138         * to which it is replying.
1139         *
1140         * [HBACK back to where the HEARTBEAT came from.]
1141         */
1142        if (chunk)
1143                retval->transport = chunk->transport;
1144
1145nodata:
1146        return retval;
1147}
1148
1149/* Create an Operation Error chunk with the specified space reserved.
1150 * This routine can be used for containing multiple causes in the chunk.
1151 */
1152static struct sctp_chunk *sctp_make_op_error_space(
1153        const struct sctp_association *asoc,
1154        const struct sctp_chunk *chunk,
1155        size_t size)
1156{
1157        struct sctp_chunk *retval;
1158
1159        retval = sctp_make_chunk(asoc, SCTP_CID_ERROR, 0,
1160                                 sizeof(sctp_errhdr_t) + size);
1161        if (!retval)
1162                goto nodata;
1163
1164        /* RFC 2960 6.4 Multi-homed SCTP Endpoints
1165         *
1166         * An endpoint SHOULD transmit reply chunks (e.g., SACK,
1167         * HEARTBEAT ACK, etc.) to the same destination transport
1168         * address from which it received the DATA or control chunk
1169         * to which it is replying.
1170         *
1171         */
1172        if (chunk)
1173                retval->transport = chunk->transport;
1174
1175nodata:
1176        return retval;
1177}
1178
1179/* Create an Operation Error chunk of a fixed size,
1180 * specifically, max(asoc->pathmtu, SCTP_DEFAULT_MAXSEGMENT)
1181 * This is a helper function to allocate an error chunk for
1182 * for those invalid parameter codes in which we may not want
1183 * to report all the errors, if the incomming chunk is large
1184 */
1185static inline struct sctp_chunk *sctp_make_op_error_fixed(
1186        const struct sctp_association *asoc,
1187        const struct sctp_chunk *chunk)
1188{
1189        size_t size = asoc ? asoc->pathmtu : 0;
1190
1191        if (!size)
1192                size = SCTP_DEFAULT_MAXSEGMENT;
1193
1194        return sctp_make_op_error_space(asoc, chunk, size);
1195}
1196
1197/* Create an Operation Error chunk.  */
1198struct sctp_chunk *sctp_make_op_error(const struct sctp_association *asoc,
1199                                 const struct sctp_chunk *chunk,
1200                                 __be16 cause_code, const void *payload,
1201                                 size_t paylen, size_t reserve_tail)
1202{
1203        struct sctp_chunk *retval;
1204
1205        retval = sctp_make_op_error_space(asoc, chunk, paylen + reserve_tail);
1206        if (!retval)
1207                goto nodata;
1208
1209        sctp_init_cause(retval, cause_code, paylen + reserve_tail);
1210        sctp_addto_chunk(retval, paylen, payload);
1211        if (reserve_tail)
1212                sctp_addto_param(retval, reserve_tail, NULL);
1213
1214nodata:
1215        return retval;
1216}
1217
1218struct sctp_chunk *sctp_make_auth(const struct sctp_association *asoc)
1219{
1220        struct sctp_chunk *retval;
1221        struct sctp_hmac *hmac_desc;
1222        struct sctp_authhdr auth_hdr;
1223        __u8 *hmac;
1224
1225        /* Get the first hmac that the peer told us to use */
1226        hmac_desc = sctp_auth_asoc_get_hmac(asoc);
1227        if (unlikely(!hmac_desc))
1228                return NULL;
1229
1230        retval = sctp_make_chunk(asoc, SCTP_CID_AUTH, 0,
1231                        hmac_desc->hmac_len + sizeof(sctp_authhdr_t));
1232        if (!retval)
1233                return NULL;
1234
1235        auth_hdr.hmac_id = htons(hmac_desc->hmac_id);
1236        auth_hdr.shkey_id = htons(asoc->active_key_id);
1237
1238        retval->subh.auth_hdr = sctp_addto_chunk(retval, sizeof(sctp_authhdr_t),
1239                                                &auth_hdr);
1240
1241        hmac = skb_put(retval->skb, hmac_desc->hmac_len);
1242        memset(hmac, 0, hmac_desc->hmac_len);
1243
1244        /* Adjust the chunk header to include the empty MAC */
1245        retval->chunk_hdr->length =
1246                htons(ntohs(retval->chunk_hdr->length) + hmac_desc->hmac_len);
1247        retval->chunk_end = skb_tail_pointer(retval->skb);
1248
1249        return retval;
1250}
1251
1252
1253/********************************************************************
1254 * 2nd Level Abstractions
1255 ********************************************************************/
1256
1257/* Turn an skb into a chunk.
1258 * FIXME: Eventually move the structure directly inside the skb->cb[].
1259 */
1260struct sctp_chunk *sctp_chunkify(struct sk_buff *skb,
1261                            const struct sctp_association *asoc,
1262                            struct sock *sk)
1263{
1264        struct sctp_chunk *retval;
1265
1266        retval = kmem_cache_zalloc(sctp_chunk_cachep, GFP_ATOMIC);
1255 ***  1129                goto   2      *
   2     */
BUG_PRINToc" class="sref">asoca>BUG_PRINToa hrefe_chunk.c#L1.c#ing">&quoFIXtp_chunspans="l%p w/oclass=\n&quoFI59" clasref">size_t retval->chunk)
;
1174
, 1239     tail_pointer" class="sref">skb_tail_pointer(retval->nodata:
(->retval->GFf">retval;
1247         ->retval->1177}
1238        1178
1238        
1238        12soc->  2EGMENT)
1131           2unk for
1131        ->1113        ->
1114        -> */
1245        ->asoc,
1259chunk)
 time a newn clasme="L1is66">116612591188{
 * to report all the errors, if the incom2s="sref">p2thmtu : 0;
 * to report all the errors, if the incom2smment">  21190">1190
116">1166< Eventually move the structure directly insidee" class="2ref">size)
1259;
1113        12soc->1193
1114        sctp_chtsm_gap+codss266">12soc->size);
1245        11661166<266">1266        asocrAN_FRTX cla"sref">retval->1195}
1196
1" class=frag" id"L1mineage,66">ck="linfrag" idst"> * to report all the errors, if the incom2s class="s2nk.  */
118mineage (82" SEND_FAILED) Eventually move the structure directly insideee" name="2ref">asoc,
1259chunk,
1238        1266        1233                return payload,
re3erve_tail)
asoc,
 4"sre.c#L1250" id="L12eee" na2o8ne" name=_, 1239     tail_point31203">12033/a>        struct 12socasoc,
 4"sre.c#L1250" id="L12eee" na2196<_, 1239     tail_point31503">12033/       2BG_OBJCNT_IN =    2BG_OBJCNT_IN<66" id="L1266" class" id="L1263" class=" name="L1, 1239     tail_point31603">12033/a>        hmac_desctomic_->asoc,
 4"sre.c#L1250" id="L12eee" na2L12cngt;1239     tail_point31703">12033/+code=ske" name="L2195">3 clas30s="sref">sctp_chunk_cachep,  ***  1213
3 href="+co3e=nodata" class="sref">no3ata1248
cau3e_code, 1249        return retval, 1233                retur_chunk.c#L3211" id="L1211" class="li3e" na311"fas">116">1166< Eventuall#L1S="L     250" source the .g., ba> : o>
re3erve_tail)
retval, 1263{
,
1261                   3 N3LL,
  2      *
hmac_desmemcpf="net/sctp/sm_mmemcpff">asoc,
   2unk foource=asoc" class="sreurcede=retval" class="sreerp/sm_make_chunk.cre" nama>.hmac_desc<3href="+cod3=retval" class="sref">ret3alasoc,
   2unk f.g.,de=hmac_desc" c.g.,"linetval" class="sre.g.,de=hmac_desc" c.g.,"linet>.hmac_desc<3hke_chunk.3lass="line" name="L1216">3216}
1249        return 1228                retu3*a3oc * to #L1Ex*****/span>ource tK, etc.) to alass="line" name="L1196">1196
12203/a>        struct sk_buunic" " id="L1247" class="ldcode=hmac_desc" class="de" name,
asss="sref">sctp_association *asoc,
12213       struct size_t 1196
12231171rass="liomment">  2      *
3mac;
,
   2unk frcla2kment">   2unk fipldcode=hmac_desc" cipldcoine" name="L1248">1248
12353         2      *
1"/sct2/sm_make_chunk.c#L1Osparwise, ex*****/it.) to 1196
unlikelyoc,
   2unk foource=asoc" class="sreurcede=r name="L1248">1248
1249        return 3ULL1249        return sctp_m3ke_chunk(1233                retura>->116">1166< Eventuall#L1Cnk.c#L1/a>1196
 * for thoargu/a>
<,       ct29enough 1205"188121m2s="sbyc#Lk" clas="s2nk.  */
 * to report all the errors, if the incomming chunk i3n 3ULL   STATl =    STATl1233                returaL1225" cl3ef">htons(1217
sk_buff *skb,
1261                   3class="sre3">htons(11111111111111111111_chunk.c#L1261"hhdr    2unk f   2unk fflags"+code=retvalIN1lags"linet/a> *ss="line" name="L1210">1210active_key3idsctp_chunk *3to_chunk(retval1263{
1239         3     34" class="sref">paylen + auth_hdr = asoc,
sctp_m3h_hdr" class="sref">auth_3drsctp_chunk<" name="L1260">1260struct sctp#L1264" id="L1264" class="line" name="3l>->skb, asoc,
hmac_desc->hmac_3en1243 3      /data:
auth_hdr = asref">ntohs(12101261                   3lass="sref3>retval->/f">retval = kmem_cache_zall3s="sref">l3ngth) + st27sm_make_chunk.cUG_PRINToa hrefe_chunk.c_zalloc" class="sref">kmem_cache_zall3sive_key_i3"sref">skb_tail_pointer(u/a> ***  3kb1228                retu3p/sm_make_3hunk.c#L1249" id="L1249" 3lass=350
1196
ret3al12socpaylen + auth_hdr = aso="+code=size" clL1240">1240
auth_hdr = ashe_zalloc" class="sref">kmem_cache_zall3d="L1250" 3lass="line" name="L1250">3250   2unk fkmem_cache_zall3dtp/sm_mak3class="line" name="L1251"31251<35>   2unk fflags"+code=retvalIN1lags"linchunk.c#L1266" id="flags"+code=retvalIN1lags"line_zalloc" class="sref">kmem_cache_zall3d"+code=hm3" name="L1253">125312soc   2unk f245" class="line" name="L1245">12">chunk_hdr->auth_hdr = ashe_zalloc" class="sref">kmem_cache_zall3d1244" cla3m_make_chunk.c#L1254" id=3L125435sctp_chunk" class="sref">sctp_chunk *<3lass="line3 name="L1255">1255hmac_deset/sctp/sm_make_chunk.csctp/sm_make_chunk.c#L1189" id="L1189" class="line" name="L1189">1189         89         ef="lass="sref">hmac_t/sctp/sm_make_chunk.cs:0sm_make_chunk.c#L1230" id="L1230" class="line" name="L1230">1238        retval->1238          ref="net/sctp/sm_make_chunk.c#L1260"sm_make_chunk.ca>        hmac_deset/sctp/sm_make_chunk.che_zalloc" class="sref">kmem_cache_zall3dive_key_i3ake_chunk.c#L1257" id="L1357" c35;
  2      *
12581255

: kmem_cache_zall3;cb[]. *** sctp_chunkify(st3uct <3 href="+code=sname="L1249">1249 return 12623/a> 3 362" id="L1171" cla259" class="line" name="L1259">1259, 12soc->); kmem_cache_zall3;1244" cla3/a> struct sctp_chunk *<3 href="+co3e=retval" class="sref">re3val; L1243" ca> :4">12be ="neunkiEFAUdne" name="L1196">1196 sctp_auth_asoc_ghref=""netssm_mc>); )1260"sm_make_chunk.c1226 kmem_cache_zall3ode=GFP_AT3MIC" class="sref">GFP_ATO3ICuass266">12soc->1228 retu3ake_chunk.3#L1129" id="L1129" class=3line"370 12="L125long212" ock188f thine" name="L1196">1196 12soc noda/sctp/sm_make_chunk.csctp/sm_make_chunket/sctp/sm_make_chunk.c#L1264" id="L1264" class="line" name="3"n2t/sct273m_make_chunk.c#L1191" id=3L119137} size_3 3ref="+code=rett/sctp/sm_make_chunk.c#L1248" id="L1248" class="line" name="L1248">1248 chunk)31213 3d="L1250" 3lass="linass="sref"2trans3ort12#L1230" id="L1230" class="line" name="L1230">1238 skb_tail_pointer31215 return ->3a hre37s="sref">sctp_chunk_cachep, retval-338">1238 1196 1238 sctp_association *asoc, 2 * 1131 12lass="line" nameDf=_3">12" claoc, 2unk f,he_zalloc" class="sref">kmem_cache_zall3">11313 , 2unk fo8ne" name=_, 1239 tail_point313 3 3 L1"> 243" c tub itselflieport all the errors, if the incomming chunk i35">1245hmac_desdev_kfree_data: 2unk fo> kmem_cache_zall3"+code=pat3mtu" cla2ke" name="Lror_f3xedsctp_chunk_cachep, 2BG_OBJCNT_DE = 2BG_OBJCNT_DE<1260"sm_make_chunk.c" id="L1263" class=" name="L1he_zalloc" class="sref">kmem_cache_zall3"8">1238 time a new3 clas38="as_tsm clasunk.c#L1=asoc: 1266 kmem_cache_zall3line"'3SN.Mis spa.Rclass' co3nt18239ine" name="L1249">1249 return 1233 returake_chunk.3#L1171" id="L1171" clacla3"L111381"fas">116">1166< Eventuall#L125ssibly, free/a>L1243" line" name="L1196">1196 sctp_association *asoc, 2 * 3 sc39; 1196 1245 117131951"_association *1240 *1260"sm_make_chunk.c" id="L1263" class=" name="L1cla2kment"> 2unk fhunk, kmem_cache_zall3lunkke_chu33">1" class=frag" id"L1mi3eage,39ef="+code=retval" class="sref">retval-3hunk.c#L1138" id="L1168" claso3">1183ineag39="as_tsm clasunk.c#L1=asoc1240 *<1260"sm_make_chunk.c" id="L1263" class=" name="L1he_zalloc" class="sref">kmem_cache_zall4, 1249 return 1266 4 1233 retu4n pay4oad116">1166< Eventuall#L1Grab al"lference >12="L1ass="lieport all the errors, if the incomming chunk i4m_make_chu4kke_chunk.c#L1257" id="L14Polis40eserv"line" id="L1247" class="sctp_association *asoc, 12034/a> struct 2 * 12034/ , kmem_cache_zall4<603">12034/a> 1215 return 12034/+code=ske" name="L2195">4 clas40s="sref">sctp_chunk_cachep, ck="linfrag" idst"> * to #L1Releaseeal"lference >12="L1ass="lieport all the errors, if the incomming chunk i4m9e_chunk.4#" id="L1168" claso3">1184ata1240 *<1260" f">sctp_association *asoc, cau4e_code, 2 * retval, , , kmem_cache_zall4l" class="4ref">retval, 1215 return N4LL1#L12ppendsbyc#s >12="L1endsof alass="linWthmtlinic2t/s243" cis not bigort all the errors, if the incomming chunk i4p/sm_make_4hunk.c#L1215" id="L1215" 4lass=41_desclass="comment"> * for thoenough="s2nk. */ ret4al 4216} 1217addtosctp_association *asoc, ="line" name="L1211210sk_bu"linename="L1217">121_make_chunk.c#L1213id="L12187" id="L1187" class="line" name="L1184"9e_chunk.4st struct 2 * a4oc121targ>1238 12204/a> struct 121pldc7sm_;1238 ="line" name="L121 ="lnk.csctp/sm_make_chunkh = 2unk f"net/ htons(1238 *sd="line" name="L1210"d="lnk.csctp/sm_make_chunkWORD_ROUNc#L1250" id="L12WORD_ROUNc1260"e" name="2nt"> ="line" name="L121 ="lnk.c) - ="line" name="L121 ="lnk.cine" name="L1230">1238 12234mac1240 2unk fo> 1238 124542_desc" class="sref">hmac_destarg>1240 2unk fo> 1238 sctp_chunk_cachep, 1238 as"sref">hmac_destarg>1238 4ULL1129 goto <4ef">sctp_m4ke_chunk(1#L12djust/a>L1243" cs" cla fieldline" name="L1196">1196 2unk f"net/ htons(chunk_hdr-> ="line" name="L121 ="lnk.csef">ntohs(ntohs(1238 2unk f"net/ >); eo1260"sm_make_chunk.c" id="L1263" class=" name="L1cla2kment"> 2unk fo> kmem_cache_zall4_make_chun4.c#L1233" id="L1233" clas4="lin43="n2t/sct2/sm_make_chunkke_chunk.c#L1250" 4n 4ULL12targ>1238 htons(1215 return htons(sctp_chunk_cachep, active_key4idck="linfrag" idst"> * to #L12ppendsbyc#s >12="L1endsof alass="liRline"s clasnif/a>Lre is1m2s="t sufficiengdeame="L1196">1196 L1243" deame="L1196">1196 1239 4 44clat TSN244<0. Thnt"> * to re" name="L1196">1196 sctp_m4h_hdr" class="sref">auth_4dr1217addtosctp_association *asoc, 1196 skb, ="line" name="L1211210sk_bu"linename="L1217">121_make_chunk.c#L1213id="L12187" id="L1187" class="line" name="L1184ltp/sm_mak4mac, 0, 2 * hmac_4ensctp_auth_asoc_gh124tailrotode=hmac_desc" cl124tailroto1260"sm_make_chunk.c" id="L1263" class=" name="L1cla2kment"> 2unk fo> 2 * 1244 44; 1217addto, ="line" name="L1211210121_make_chunk.c#L1213id="L1218ine" name="L1230">1238 1238 1"line" name="L1214">12#L1230" id="L1230" class="line" name="L1230">1238 skb_tail_pointer(1249 return 4kb1228 retu4p/sm_make_4hunk.c#L1249" id="L1249" 4lass=45clat TSN244<0. Thnt"> * to #L12ppendsbyc#s ) to user 1205"1>12="L1endsof alass="linWthmtlinic2t/ name="L1196">1196 ret4al * to r*s243" cis not bigoenough="s2nk. */ 4250116">1166< Eventually*iRline"s a kernel err value="s2nk. */ * for th" name="L1196">1196 1253 classuser>addtoaddtosctp_association *asoc, ome="L1260">1260 ="line" name="L12112101196 sctp_association iove1f">asoc, 1255 2 * 12targ>1238 errt;12581228 retu4;cb[]. 1196 sctp_chunkify(st4uct <46amtt_in_progline266">12soc1240 2unk fo> 1238 12624/a> 4 46thhdr" class="/sct2/sm_make_chunk.c#L1Copy=id=" (wclas iove1)eta>oL 1e" name="L1196">1196 s/sm_make_chunk.cerrt;);f">as"sref">hmac_destarg>1260 struct 1240 1238 re4valasocrAN_FRTX cla"sref">retval-4c(1196 GFP_ATO4IC 2unk f"net/ htons(1196 1255

h = 2unk f"net/ htons(ntohs(1238 paylen + "net/"L1263" class=" name="L1cla2kment"> 2unk f"net/ >); eo1260"sm_make_chunk.c" id="L1263" class=" name="L1cla2kment"> 2unk fo> 1238 1233 retu4"n2t/sct274m_make_chunk.c#L1191" id=4L119147} 1240 1213 4 w/oclass=4n&quoFI59" clasref">size_4 4ref="+code=rett/sctp/sm_make_chunk.cerrt;1238 chunk)41249 return sctp_chunk *<4r" class="4ref">skb_tail_pointer4 * for #L1Helper functp/s 0; Tssign a TSNef">a> :edlinT id=Tssum#s >hat bolassame="L1196">1196 ->4a hre47> 4 ck="linfrag" idst"> * to ne" name="L1196">1196 1238 skb, sctp_association *asoc, 1238 2 * 4 sctp_chunk<> *asoc, , 1238 1131 sctp_association *asoc, ae_zalloc" cl1230">1238 sctp_association *< f"eaode=hmac_desc" cl> *< f"eaof">asoc, ae_zalloc" cl1230">1238 12soc, skb, 1238 4 , ); 1238 asocrAN_FRTX cla"sref">retval-4"+code=pat4mtu" cla2ke" name="Lror_f4xedsctp_auth_asoc_g" id="L1263" class=" name="L1cla2kment"> 2unk fhas_ssef">skb, unlikeline" name="L1230">1238 1238 time a new4 clas48 name="L1228">1228 retu4line"'4SN.Mis spa.Rclass' co4nt182490 1196 12soc); 2unk fsubhref="+code=ntohsubh="L1lass="sref">hmacid="htone_chunk.c#L1213id="htons" class="sref">htonsahe_zalloc" cl1230">1238 asctoc, 2unk f">1189 1266 sema2ef="+code=size_t" class=o">1240 1238 ) hmac_desc-> 4 sc49class="line" name="L1254">1="sref">uL1All frag/a> < must/hav59 * for t"sref">uL" name="L1196">1196 4195, 2unk fhunk, 1238 1" class=frag" id"L1mi4eage,49a,toc, 2unk f"net/> = t 2 * 1184ineag49e" name="L1255">1255sctp_auth_asoc_gla href="+code=asoc" l="sref">acla2kment"> 2unk f"net/ htons 2ATA_UNORDEREc#L1250" id="L12"> 2ATA_UNORDEREcss="sss="liomment"> 2 * , skb, 1266 5 2 * pay5oadsctp_auth_asoc_gla href="+code=asoc" l="sref">acla2kment"> 2unk f"net/ htons 2ATA_LAST_FRAG#L1250" id="L12"> 2ATA_LAST_FRAG#L1187" id="L1187" class="line" name="L1185m_make_chu5kke_chunk.c#L1257" id="L15Polis503t skb, *< sn_nex>1240 *< sn_nex>/sm_make_chunk.c#L12 f"eaode=hmac_desc" clf"eaof">am="sref">hmac_dese>); 1238 12035/a> struct 1238 12035/ skb, *< sn_peeef="+code=asoc" class sn_peee/sm_make_chunk.c#L12 f"eaode=hmac_desc" clf"eaof">am="sref">hmac_dese>); 1238 12035/a> 1249 return 12035/+code=ske" name="L2195">5 clas50s="sref">sctp_chunk_cachep, uass266">12socacla2kment"> 2unk fsubhref="+code=ntohsubh="L1lass="sref">hmacid="htone_chunk.c#L1213id="htons" class="sref">htonsskb, sef">skb, 1238 1185ata1255

acla2kment"> 2unk fhas_ssef">skb, cau5e_code, 1249 return retval, 1249 return retval, * for #L1Helper functp/s 0; Tssign a TSNef">a> :edlinT id=Tssum#s >hat bolassame="L1196">1196 N5LLL1id="hton the anet/sctp/s hav591uL" name="L1196">1196 skb, sctp_association *asoc, ret5al 2 * 5216 2unk fhas_tsef">skb, 2 * 1255 * for #L1T id="L1a>L1ommt p5ssibl"1instant 0; name="L1196">1196 a5oc * to rrrrrrrrrrrrrrrrr* Tssign a TSN="s2nk. */ 12205/a> struct * to rrrrrrrrrrrrrrrrr*" name="L1196">1196 2unk fsubhref="+code=ntohsubh="L1lass="sref">hmacid="htone_chunk.c#L1213id="htons" class="sref">htonsskb, 1196 lassanet/sctp/s_get_nex>_tsef">skb, _tse/sm_make_chunk.c#L12" id="L1263" class=" name="L1cla2kment"> 2unk f6">1226 1223 2unk fhas_tsef">skb, 5mac1249 return 125552ine" name="L1215">1215 return sctp_chunk_cachep, ck="linfrag" idst"> * to #L1CreateealCLOSED anet/sctp/s 0; use with th1int">212"p211=tline" name="L1196">1196 sctp_association *skb, asoc, 1226 ref=f="netemf=an>1/sm_m>sk_bu f">sctp_association *226 ref=endpo/a>f">asoc, 1266 code=reL1196">1196 5ULLsctp_association *asoc, 1196 sctp_m5ke_chunk(auth_hdr, auth_hdr 2 * sctp_association *skb, asoc, 1226 sctp_association1260asoc, 5ULLauth_hdr, auth_hdrhtons(sctp_association *1260 *asoc, 1260a42" id="L1131" class="line" name="L1135_ref="+cod5">htons(sctp_chunk_cachep, active_key5id * to #L1Createe="L12are anet/sctp/sline" name="L1196">1196 auth_hdr *< sopeef">auth_hdr lasssourceef">auth_hdr1239 5 54" class="sref">paylen + 6">1226 *skb, 1266 code=re/sm_make_chunk.ce266">1266 code=rcla2kment"> 2unk fbaseef">auth_hdrhmacet/sctp/sm_make_chunk.cm="sref">hmac_desesopeef">auth_hdrhmac_desgfpef">auth_hdrsctp_m5h_hdr" class="sref">auth_5dr 1226 skb, skb, hmac_5en12soc 2unk f > 1245 54; 1196 retval->hmac_des6e="L1260">1260ahunp_association * ref=get_af_specifi1/sm_make_chunk.c#L12ipver26e="L1260">1260 > 2unk fversp/sf">skb, ) + sctp_auth_asoc_gunlikel2lass="line" namunlikel2" clatp/sm_make_chunk6e="L1260">1260ah87" id="L1187" class="line" name="L1185sive_key_i5"sref">skb_tail_pointer(u/a>5kb1260alass="sref">htons: , 1189 hmacpeer>addne_chunk.c#L1213peer>addnnk.cm="sref">hmac_dese> 1213 5href="+cod5=retval" class="sref">ret5al 1226 52501213 5h"+code=hm5" name="L1253">125312soc: 6">1226 12#L1230" id="L1230" class="line" name="L1230">1238 12551215 return sctp_chunk_cachep, ck="linfrag" idst"> * to #L1Build alaookie="lpresenting 1258a> :ed 0; put/a>L12ookie=in/a>L1INIT ACK="s2nk. */ * to re" name="L1196">1196 sctp_chunkify(st5uct <56amtt_stctpctp_association *auth_hdrasoc, auth_hdrsk_bu f">sctp_association *226 ref=endpo/a>f">asoc, 1266 code=reL1196">1196 sctp_association *skb, asoc, 1226 1196 sk_bu f">sctp_association *asoc, 1196 1196 12raw>addn addn<_="line" name="L121addn<_="lref="2" id="L1131" class="line" name="L1135 href="+co5e=retval" class="sref">re5val 2 * ( *auth_hdrasoc, 1238 GFP_ATO5ICsctp_association *< ignessaookieef">auth_hdrasoc, auth_hdraine" name="L1230">1238 sctp_associationatteratter, 1238 headersizeef">auth_hdrhmac_desbodysizeef">auth_hdr1238 key="line" name="L121key="lt/sce_zalloc" cl1230">1238 1238 size_5 57esc" class="sref">hmac_desc->chunk)51196 1="sref">uL1any pldc7sm="s2nk. */ skb_tail_pointer5 * for ="sref">uL" name="L1196">1196 ->5a hre57"+f="+code=retval" class"sreheadersizeef">auth_hdrsizeofae" name="2nt"> lassp2ramhdrsref">auth_hdr1196 uuuuuu(sizeofa f">sctp_association *< ignessaookieef">auth_hdra) -L1196">1196 1255<="L125 izeofa f">sctp_association *auth_hdra)"42" id="L1131" class="line" name="L113559">1238 paylen + bodysizeef">auth_hdrsizeofa f">sctp_association *auth_hdra)2" id="L1131" class="line" name="L11355" class="5 ntohs( = 2unk f"net/ htons(ntohs(L12ookie=0; T multiple=0; _chu/1196 uL1functp/sL1simpler >12writf="s2nk. */ 1="sref">uL" name="L1196">1196 sctp_auth_asoc_gbodysizeef">auth_hdr COOKIE_MULTIPLEef">auth_hdr COOKIE_MULTIPLEf">a)2" id="L1131" class="line" name="L11355etval" cl5mtu" cla2ke" name="Lror_f5xed1ctp_auth_asoc_gbodysizeef">auth_hdr COOKIE_MULTIPLEef">auth_hdr COOKIE_MULTIPLEf">a2" id="L1131" class="line" name="L11355de=GFP_AT5k.c#L1257" id="L1256" imp5uide-58ikely" class="sref">uuuuuuuuu->sctp_auth_asoc_gbodysizeef">auth_hdr COOKIE_MULTIPLEef">auth_hdr COOKIE_MULTIPLEf">a)42" id="L1131" class="line" name="L11355="line" n5" clasM1) E/a> time a new5 clas58e" name="L125oc, auth_hdrntohs(auth_hdr1238 1129 goto <5spa.Rclass5#39; count1will name="L1451#L1Cleascure name="L1196">1196 116">1166< Eventually"sref">uL1out/o> ) * for t"sref">uL" name="L1196">1196 12soc1226 kzall>1/sm_moc, a)42" id="L1131" class="line" name="L11351114 5 sc595desc" class=f">stp/sm_make_chunk"liva8" id="L1248" cl"liva8s="l)2" id="L1131" class="line" name="L11351" class="5/a> 5195sctp_chunk_cachep, 1" class=frag" id"L1mi5eage,59auth_hdrahuna f">sctp_association *< ignessaookieef">auth_hdra *)lass266">12soc 2unk fbodyef">auth_hdr1185ineag59 name="L1228">1228 retu6, 1196 1266 6 12soc 2unk f266">1266 p="L1lass="sref">hmactypeef">auth_hdr PARAM_STATE COOKIEef">auth_hdr PARAM_STATE COOKIEL12142" id="L1131" class="line" name="L1136n pay6oad 2unk f266">1266 p="L1lass="sref">hmac>(chunk_hdr->, hmac_desc->12036/a> struct 1196 12036/ auth_hdra+code=size_t" class=189 chunk_hdr-">1189 12036/a> L12ookie.ne" name="L1196">1196 12036/+code=ske" name="L2195">6 clas60"+f="+code=retval" class"sre"ookieef">auth_hdra+code=size_t" class=189 hmacraw>addn_chunk_hdr-"ddn<_="line" name="L121addn<_="lref=42" id="L1131" class="line" name="L1136ake_chunk.6#L1207" id="L1207" class=6line"60ikely2" id="L1131" class="line" name="L1136a9e_chunk.6#" id="L1168" claso3">1186ata capability.ne" name="L1196">1196 cau6e_code, paylen + "ookieef">auth_hdra+code=size_t" class=189 hmacprclassaapableef">auth_hdrchunk_hdr-">1189 auth_hdrhmacprclassaapableef">auth_hdrretval, 1233 retu6= L12ookie.ne" name="L1196">1196 retval, auth_hdra+code=size_t" class=189 hmacadaptctp/s_i); chunk_hdr-">1189 auth_hdrhmacadaptctp/s_i); 12036code=NULL" class="sref">N6LL12036/sctp/sm_make_chunk.c#L1264" id61; 1196 12036hunk.c#L1215" id="L1215" 6lass=61_desc" class="sref">hmac_desdo=get0imeofdayef">auth_hdr, auth_hdra+code=size_t" class=189 hmac xpirctp/s89 < xpirctp/sref=)42" id="L1131" class="line" name="L1136href="+cod6=retval" class="sref">ret6al1189 auth_hdrauth_hdra+code=size_t" class=189 hmac xpirctp/s89 < xpirctp/sref=)42" id="L1131" class="line" name="L1136hke_chunk.6lass="line" name="L1216">6216L1peeo's inithp211=tline" name="L1196">1196 a6ocpaylen + memcpf89 , auth_hdra+code=size_t" class=189 hmacpeer>initef">auth_hdrinit="L1[0]enp_association 2unk f"net/ 1196 12206/a> struct 2unk f"net/ htons(L1raw local addresss1196 122312soc auth_hdra+code=size_t" class=189 hmacpeer>initef">auth_hdrinit="L1[0] +L1196">1196 6macntohs( = 2unk f"net/ htons(addnchunk_hdr-"ddn<_="line" name="L121addn<_="lref=)42" id="L1131" class="line" name="L11361603">12036ss="line" name="L1225">126562="sref">asocrAN_FRTX cla"sref">retval-61ref="+cod6ref="+code=sctp_auth_asoc6get_h62c" class="sref">sctp_auth_asoc_gclass ef="+code=asoc" class e/sm_make_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fbaseef">auth_hdrhmacet/sctp/sm_make_chunk.chcla2kment"> 2unk fhma189 2 * if (u f">sctp_association hmac_desdes189 1228 retu6n 6ULL1196 sctp_m6ke_chunk(hmaceg>init_oneef">auth_hdrinit_one" claoc, , auth_hdra+code=size_t" class=189 hmac_desbodysizeef">auth_hdr SECRET_SIZEef">auth_hdr SECRET_SIZEkely42" id="L1131" class="line" name="L1136n" class="6_chunk.c#L1232" id="L12326 clas633t ahunacharso)ake_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fsecret_keyine" name="L121secret_key="L1[ake_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fcurrunk_keyine" name="L121currunk_keyde=r]42" id="L1131" class="line" name="L1136n hmactfode=hmac_desc" ctfot/schunp_association1266 code=rcla2kment"> 2unk fbaseef">auth_hdrhmacet/sctp/sm_make_chunk.chcla2kment"> 2unk fhma189 6ULL hmacflags"+code=retvalIN1lags"lincun4" id="L1114" class="line" name="L1114"6_/sm_make_6ef">htons(asocrAN_FRTX cla"sref">retval-6_ref="+cod6">htons(1f">sctp_auth_asoc_g"rypto_hash_setkeyine" name="L121crypto_hash_setkey/sm_make_chunk.c#L12des189 hmactfode=hmac_desc" ctfot/scm="sref">hmac_deskeyine" name="L121keyf">am="sref">hmac_deskey="line" name="L121key="lt/sc) ||f">asocrAN_FRTX cla"sref">retval-6_ke_chunk.6" class="sref">active_key6iduuuuuctp_auth_asoc_g"rypto_hash_digef="+code=retvalIN"rypto_hash_digef=" claoc, hmac_desbodysizeef">auth_hdrauth_hdra+code=size_t" class=signaturef="+code=asoc" cignature n>ah87" id="L1187" class="line" name="L1186a9e_chunk.6>(1255<="L125>u/a>auth_hdr1239 6 64e=sctp_chunk"name="L1249">1249 return sctp_m6h_hdr" class="sref">auth_6dr1233 retu6l>->skb, 12"liva8" id="L1248" cl"liva8s="line" name="L1230">1238 hmac_desc->hmac_6enauth_hdr1213 6= 1246 64; : "liva8" id="L1248" cl"liva8s="l)ine" name="L1230">1238 retval->ntohs(1213 6lref="+cod6ngth) + skb_tail_pointer(12#L1230" id="L1230" class="line" name="L1230">1238 6kb1249 return 1129 goto <6href="+cod6=retval" class="sref">ret6al * to #L1Unp211=a>L12ookie=from COOKIE ECHO g,="lcreat7sm/1196 6250sctp_association *skb, asoc, auth_hdr1196 sctp_association *226 ref=endpo/a>f">asoc, 1266 code=reL1196">1196 1253sk_bu f">sctp_association *skb, asoc, 1226 1196 sctp_association *asoc, auth_hdr, auth_hdr1196 1255, sctp_association *asooc, 1266 crr2s="l)L1196">1196 2 * sctp_association *skb, asoc, 1238 1258sctp_association *< ignessaookieef">auth_hdrasoc, auth_hdraine" name="L1230">1238 sctp_association *auth_hdrasoc, auth_hdraine" name="L1230">1238 sctp_chunkify(st6uct <661desc" class=fa> 2unk fheadersizeef">auth_hdrhmac_desbodysizeef">auth_hdrhmac_desfixesssizeef">auth_hdraine" name="L1230">1238 12digef="+code=retvalINdigef=" clhunp_association1266 code=rcla2kment"> 2unk fdigef="+code=retvalINdigef=" cline" name="L1230">1238 sctp_associationatteratter, 1238 key="line" name="L121key="lt/scm="sref">hmac_des="line" name="L121="lref=42" id="L1131" class="line" name="L1136 struct 1238 re6valhmac_desclass copesref">auth_hdr, auth_hdrsctp_association1260asoc, 2unk f > GFP_ATO6ICsctp_association, sctp_association hmac_desdes189 1129 goto <6a" class="6e=nodata2ch it is r2plyin6.1#L1Header>size="L1stctpctid=" prior >12="L1actual12ookieettacluc7sms=ame="L1196">1196 116">1166< Eventually"sref">uL1any pldc7sm="s2nk. */ size_6 67pan class="comment"> * for t"sref">uL" name="L1196">1196 chunk)612socauth_hdrsizeofae" name="2nt"> lasst/scthdrsref">auth_hdr1196 sctp_association *< ignessaookieef">auth_hdra) -L1196">1196 skb_tail_pointer6sctp_association *auth_hdra)"42" id="L1131" class="line" name="L1136retval" cl6sschunk.c#L1212l->6a hre67"+f="+code=retval" class"srebodysizeef">auth_hdr">ntohs( = 2unk f"net/ htons(12socauth_hdrauth_hdrahunp_associationauth_hdrsctp_association *auth_hdra)42" id="L1131" class="line" name="L1136r="line" n6> 1228 retu659">1238 * to rrrrrrrrr* T ere must be enough room188 116">1166< Eventually"sref">uL1INIT 29sm_m"s2nk. */ * for t"sref">uL" name="L1196">1196 12soc">ntohs( = 2unk f"net/ htons(sass266">12socauth_hdrahef izeofa f">sctp_association *auth_hdrah87" id="L1187" class="line" name="L11861" class="6 sctp_chunk_cachep, * to #L1Verify=a>at/a>L12ookie=has been pldced out.ne" name="L1196">1196 time a new6 clas68e" name="L125f">sctp_auth_asoc_gbodysizeef">auth_hdr COOKIE_MULTIPLEef">auth_hdr COOKIE_MULTIPLEf">a)2" id="L1131" class="line" name="L1136line"'6SN.Mis spa.Rclass' co6nt18269e=sctp_chunk" class="/a>1233 retu6ake_chunk.6#L1171" id="L1171" clacla6"L111692nk_hdr" clast/sctp/sm_make_chunk.c#L1Processs1196 auth_hdraunkc, 2unk f ubhref="+code=ntoh ubh="L1lass="sref">hmac ookie_ 12socauth_hdraunkoc, auth_hdra+code=size_t" class=189 sc695desc2" id="L1131" class="line" name="L1136s" class="6/a> stp/sm_make_chunkclass ef="+code=asoc" class e/sm_make_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fbaseef">auth_hdrhmacet/sctp/sm_make_chunk.chcla2kment"> 2unk fhma189 61951/a>1" class=frag" id"L1mi6eage,69ikely2" id="L1131" class="line" name="L1136s="line" n68" id="L1168" claso3">1186ineag69e" name="L125t/sctp/sm_make_chunk.c#L1Che11=a>L1cignature.nne" name="L1196">1196 paylen + key="line" name="L121key="lt/schunp_association SECRET_SIZEef">auth_hdr SECRET_SIZEkely42" id="L1131" class="line" name="L1137gclass="li7e" namsg266">1266 7 12socinit_oneef">auth_hdrinit_one" claoc, 12socauth_hdram="sref">hmac_desbodysizeef">auth_hdrpay7oadahunacharso)ake_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fsecret_keyine" name="L121secret_key="L1[ake_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fcurrunk_keyine" name="L121currunk_keyde=r]42" id="L1131" class="line" name="L1137n3 hmactfode=hmac_desc" ctfot/schunp_association1266 code=rcla2kment"> 2unk fbaseef">auth_hdrhmacet/sctp/sm_make_chunk.chcla2kment"> 2unk fhma189 12037/a> struct 12soc hmacflags"+code=retvalIN1lags"lincun4" id="L1114" class="line" name="L1114"7g503">12037/ 12037/a> hmac_desmemseref">auth_hdrhmac_des"> SIGNATURE_SIZEef">auth_hdr SIGNATURE_SIZEt/sc)42" id="L1131" class="line" name="L1137n703">12037/+code=ske" name="L2195">7 clas70c" class="sref">sctp_auth_asoc_g"rypto_hash_setkeyine" name="L121crypto_hash_setkey/sm_make_chunk.c#L12des189 hmactfode=hmac_desc" ctfot/scm="sref">hmac_deskeyine" name="L121keyf">am="sref">hmac_deskey="line" name="L121key="lt/sc) ||f">asocrAN_FRTX cla"sref"" name="L1137n803">12037/">1" class=frag" id"L1mi7line"70ikely" class="srectp_auth_asoc_g"rypto_hash_digef="+code=retvalIN"rypto_hash_digef=" claoc, hmac_desbodysizeef">auth_hdr 2 * 1187ata1255, hmac_des"> IERROR_NOMEMef">auth_hdr IERROR_NOMEMnk.c42" id="L1131" class="line" name="L1137"sref">cau7e_code, retval, 1249 return retval, sctp_auth_asoc_gmemcm266">1266 memcm2/sm_make_chunk.c#L12digef="+code=retvalINdigef=" cl, >, auth_hdra+code=size_t" class=signaturef="+code=asoc" cignature n>am="sref">hmac_des"> SIGNATURE_SIZEef">auth_hdr SIGNATURE_SIZEt/sc)hss="liomment"> 2 * 12037code=NULL" class="sref">N7LL1196 12037/sctp/sm_make_chunk.c#L1274" id71; ahunacharso)ake_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fsecret_keyine" name="L121secret_key="L1[ake_chunk.c#L12e266">1266 code=rcla2kment"> 2unk f>12t_keyine" name="L121>12t_keyde=r]42" id="L1131" class="line" name="L1137l603">12037hunk.c#L1215" id="L1215" 7lass=71unk_hdr" class="sref""sref">hmac_desmemseref">auth_hdrhmac_des"> SIGNATURE_SIZEef">auth_hdr SIGNATURE_SIZEt/sc)42" id="L1131" class="line" name="L1137href="+cod7=retval" class="sref">ret7al1f">sctp_auth_asoc_g"rypto_hash_setkeyine" name="L121crypto_hash_setkey/sm_make_chunk.c#L12des189 hmactfode=hmac_desc" ctfot/scm="sref">hmac_deskeyine" name="L121keyf">am="sref">hmac_deskey="line" name="L121key="lt/sc) ||f">asocrAN_FRTX cla"sref"" name="L1137hke_chunk.7lass="line" name="L1216">7216uuuuuctp_auth_asoc_g"rypto_hash_digef="+code=retvalIN"rypto_hash_digef=" claoc, hmac_desbodysizeef">auth_hdr 2 * 1255<="L125>uoc, hmac_des"> IERROR_NOMEMef">auth_hdr IERROR_NOMEMnk.c42" id="L1131" class="line" name="L1137*a7oc12207/a> struct 1249 return sctp_auth_asoc_gmemcm266">1266 memcm2/sm_make_chunk.c#L12digef="+code=retvalINdigef=" cl, >, auth_hdra+code=size_t" class=signaturef="+code=asoc" cignature n>am="sref">hmac_des"> SIGNATURE_SIZEef">auth_hdr SIGNATURE_SIZEt/sc)hss="liomment"> 2 * 1223uuuuuc/sctp/sm_make_chunk.c#L1Yikes! Still bad1cignature!ne" name="L1196">1196 7macuoc, hmac_des"> IERROR_BAD SIGef">auth_hdr IERROR_BAD SIGode=42" id="L1131" class="line" name="L11371603">12037ss="line" name="L1225">127572unk_hdr" class="sref"="L125""/a>1name="L1249">1249 return if (1249 return 1228 retu7n 7ULL 1213 7ef">sctp_m7ke_chunk(1#L1IG Sectp/s 2.35.2: name="L1196">1196 116">1166< Eventually"sref">uL1 3) Compar ha>L1port numbers=and/a>L1verificctp/s tagl>sktamacd name="L1196">1196 * for t"sref">uLef">uwithin/a>L1COOKIE ECHO g >12="L1actual1port numbers=and/a>L name="L1196">1196 uL11111verificctp/s taglwithin/a>L1"> c/sm/s headercof 1196 7ULL1="sref">uLef">up211=tliIf 1196 12037ef">htons(1="sref">uLef">udiscarded, name="L1196">1196 htons( * for t"sref">uL" name="L1196">1196 active_key7idsctp_auth_asoc_g/sct8" id="L1248" cl/sct8/sm_make_chunk.c#L12"net/"L1263" class=" name="L1cla2kment"> 2unk f lasshdref">auth_hdrhtonsauth_hdrauth_hdralass="sref">htonsauth_hdr 2 * (1255, hmac_des"> IERROR_BAD TAGef">auth_hdr IERROR_BAD TAGode=42" id="L1131" class="line" name="L1137line" name7"L1239">1239 7 74e=sctp_chunk" class="/a>sctp_m7h_hdr" class="sref">auth_7dr1249 return ->skb, sctp_auth_asoc_g"net/"L1263" class=" name="L1cla2kment"> 2unk f lasshdref">auth_hdrhtonsauth_hdralass="sref">htonsaddnef">auth_hdraddnkelylass="sref">hmacv4ef">auth_hdrhmacein_portf="+code=asoc" cin_portasocrAN_FRTX cla"sref"" name="L1137="+code=hm7c_len" class="sref">hmac_7en 2unk f lasshdref">auth_hdrhtonsauth_hdralass="sref">htons 2 * 1247 74; hmac_des"> IERROR_BAD PORTSef">auth_hdr IERROR_BAD PORTSode=42" id="L1131" class="line" name="L1137l603">12037>retval->) + 1249 return skb_tail_pointer(7kba>L12ookie="L1stcle.nnIf 1196 116">1166< Eventually"sref">uL1an anet/sctp/s, 1196 sctp_m7=retval" class="sref">ret7al * to y"sref">uL188 7250116">1166< Eventually"sref">uL1If skb=has been 0imestcmped, L1stcmp, o1196 * for t"sref">uLeus hcurrunk 0ime.nnThis introduces alsmall1possibility=a>at name="L1196">1196 1253uL1a>at/alaookie may be >sk_idered= xpired, but his would only slow name="L1196">1196 1="sref">uLedown/a>L1newhanet/sctp/s estcblish254" instead1of everyup211=tl name="L1196">1196 12037 name="L1255">12551="sref">uL" name="L1196">1196 sctp_auth_asoc_gcock_1lagf="+code=asoc" cock_1lag/sm_make_chunk.c#L12e266">1266 code=rcla2kment"> 2unk fbaseef">auth_hdrhmacet/sctp/sm_make_chunk.cm="sref">hmac_des"OCK_TIMESTAMPef">auth_hdr1196 uass="sref">hmacetb=get_0imestcmp/sctp/sm_make_chub=get_0imestcmp/sm_make_chunk.c#L12 > 1258htonsauth_hdr, sctp_chunkify(st7uct <76 name="L1233">1233 retu7;="L1250" 7st struct stp/sm_make_chunk6">1226 , auth_hdralass="sref">htons < xpirctp/sref=m="sref">hmac_destv" id="L1248" cl0vode=)) s="liomment"> 2 * 1196 u"sref">uLeSectp/s 3.3.10.3 Stcle Cookie Erro (3) name="L1196">1196 1="sref">u"sref">uL name="L1196">1196 12037e=retval" class="sref">re7val1="sref">u"sref">uLeCausL1of erro #Lame="L1196">1196 * for t"sref">u"sref">uLe---------------#Lame="L1196">1196 GFP_ATO7ICu"sref">uLeStcle Cookie Erro :nnIndicctes 1196 1="sref">u"sref">uLeCookie a>at/has xpiredl name="L1196">1196 116">1166< Eventually"sref">u"sref">uL" name="L1196">1196 hmac="line" name="L121="lref= =>">ntohs( = 2unk f"net/ htons(1266 crr2s="lhunp_association1226 , hmac_des="line" name="L121="lref=s42" id="L1131" class="line" nametp/sm_7a" class="7n&quoFI59" clasref">size_7 773t soc, 1266 crr2s="l) s="liomment"> 2 * chunk)7uuuuuc_associationskdssref">auth_hdrskdssrt > = hmactv_sL>f="+code=asoc" tv_sL>s="lh-L1196">1196 uuuuuc_associationauth_hdralass="sref">htons < xpirctp/sref=lass="sref">hmactv_sL>f="+code=asoc" tv_sL>s="l)uLe1000000L +L1196">1196 skb_tail_pointer7uuuuuc_associationhmactv_usL>f="+code=asoc" tv_usL>s="lh-uc_associationauth_hdralass="sref">htons < xpirctp/sref=lass="sref">hmactv_usL>f="+code=asoc" tv_usL>s="l42" id="L1131" class="line" nametp/sm_7aref="+cod7sschunk.c#L1212l->7a hre77"line" name="L1206">1f">uuuuuc_association ">ntohs(> = 7 1255<="L125>up_association, 1266 crr2s="lm="sref">hmac_des"> ERROR_STALE COOKIEef">auth_hdr ERROR_STALE COOKIEs="lm2" id="L1131" class="line" name="L113759">1238 s89 up_association, 1266 crr2s="lm=sizeofae" name="2nt"> s89 , , hmac_des"> IERROR_STALE COOKIEef">auth_hdr IERROR_STALE COOKIEs="l42" id="L1131" class="line" nametp/sm_75tp/sm_mak7 uuuuuoc, hmac_des"> IERROR_NOMEMef">auth_hdr IERROR_NOMEMnk.c42" id="L1131" class="line" name="L11371114 7 1249 return time a new7 clas78e" name="L125t/sctp/sm_make_chunk.c#L1Mne" a1newhbase anet/sctp/sline" name="L1196">1196 paylen + copeef">auth_hdrauth_hdr12soc1266 code=rm="sref">hmac_dese266">1266 code=rcla2kment"> 2unk fbaseef">auth_hdrhmacet/sctp/sm_make_chunk.cm="sref">hmac_des copeef">auth_hdrauth_hdrstp/sm_make_chunk"liva8" id="L1248" cl"liva8s="l) s="liomment"> 2 * ) , hmac_des"> IERROR_NOMEMef">auth_hdr IERROR_NOMEMnk.c42" id="L1131" class="line" name="L1137s"+code=hm7m_mis spa_ classclass="li7e" na794t sc795" class="srename="L1249">1249 return asocrAN_FRTX cla"sref">retval-7letval" cl7"+code=ske" name="L2195">71951196 1" class=frag" id"L1mi7eage,79htonshmacportf="+code=asoc" port">ntohs( = 2unk f lasshdref">auth_hdrhtons1187ineag79 name="L1228">1228 retu8, 1196 1266 8 12socauth_hdr, htons 12socauth_hdram=sizeofaoc, auth_hdra)"42" id="L1131" class="line" name="L1138n pay8oadsctp_auth_asoc_gclassanet/_set_bind>addn_fromauth_hdraddn_from12socauth_hdramhref="net/sctp/sm_make_chunk.c#L1251"8n4uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuass266">12socauth_hdr 2 * 12038/ , hmac_des"> IERROR_NOMEMef">auth_hdr IERROR_NOMEMnk.c42" id="L1131" class="line" name="L1138m603">12038/a> 12038/+code=ske" name="L2195">8 clas80c" class="srename="L1249">1249 return 12038/">1" class=frag" id"L1mi8line"80ikely2" id="L1131" class="line" name="L1138a9e_chunk.8#" id="L1168" claso3">1188ata1196 cau8e_code, sass266">12socist_empty" claoc, htonsauth_hdrhmacbind>addnef">auth_hdraddn="L1lass="sref">hmacaddness_ 2 * retval, hmacclassadd_bind>addnef">auth_hdraddn" claoc, htonsauth_hdrhmacbind>addnef">auth_hdraddn="L1,toc, 2unk fdef="+code=retvalINdef=" clmhref="net/sctp/sm_make_chunk.c#L1251"8= hmac"> ADDR_SRCef">auth_hdr ADDR_SRCs="l,tass266">12socauth_hdrretval, 1249 return 12038code=NULL" class="sref">N8LL1249 return 12038/sctp/sm_make_chunk.c#L1284" id81; htons ">ntohs(htons hmacinitial_tss89 12038hunk.c#L1215" id="L1215" 8lass=81_desc" class="sref">hmac_des"liva8" id="L1248" cl"liva8s="llass="sref">htons">ntohs(htons 12038=retval" class="sref">ret8alhtons">ntohs(htons hmacinitial_tss89 12038lass="line" name="L1216">8216htonsack_poin="+code=retvalINadv_peeo>ack_poin=">ntohs(htonshtonshmacprclasscapableef">auth_hdr">ntohs(htons hmacprclasscapableef">auth_hdra8ocpaylen + "liva8" id="L1248" cl"liva8s="llass="sref">htonshmacadaptctp/s_ind"+code=retvalINadaptctp/s_ind">ntohs(htons hmacadaptctp/s_ind"+code=retvalINadaptctp/s_ind struct 1233 retu81 L1cide effe"ts.nne" name="L1196">1196 ">ntohs(12038ine" name="L1223">12231249 return 8mac1213 81603">12038ss="line" name="L1225">128582_desc" class=f">sp/sm_make_chunk"liva8" id="L1248" cl"liva8s="l)" class="line" name="L1213">1213 81703">12038ref="+code=sctp_auth_asoc8get_h82"line" name="L1206">1p_associationauth_hdr">ntohs(8ULL(12soc1213 8a>->1196 * for t"sref">uLemal881196 uL" name="L1196">1196 8ULL, hmac_des"> IERROR_MALFORMEDef">auth_hdr IERROR_MALFORMEDs="l42" id="L1131" class="line" name="L1138n603">12038ef">htons(htons(1249 return active_key8id1/******************************************************************** name="L1196">1196 1239 8 84ame="">116">1166< Eventually* 3rd Level Abstractp/ss"s2nk. */ sctp_m8h_hdr" class="sref">auth_8dr * to y********************************************************************" name="L1196">1196 skb, sctp_association 2 * hmac_8en1248 84; , auth_hdr12038>retval->) + sctp_chunk_cachep, skb_tail_pointer(1196 8kb1=* Report a iissingemandatoryup2r"srterl name="L1196">1196 116">1166< Eventually*" name="L1196">1196 sctp_m8=retval" class="sref">ret8alauth_hdrsk_t f">sctp_associationauth_hdr, 1226 1196 82501p_associationauth_hdr, auth_hdr1196 sctp_association, 1196 1253uuuuuuuuuuuuuuuuuuu f">sctp_association, 1266 crr2s="l)L1196">1196 2 * 12038 name="L1255">1255sctp_association, 1258">ntohs(auth_hdr "lportf="+code=asoc" "lportode=)"42" id="L1131" class="line" name="L1138;cb[]. sctp_chunkify(st8uct <86amtt_in_progli"line" name="L1254">1#L1Mne" an ERROR g,1prep2ringeenough room188< name="L1196">1196 116">1166< Eventually"sref">uL1"liurningemultiple sctnown/p2r"srtersl name="L1196">1196 * for t"sref">uL" name="L1196">1196 stoc, 1266 crr2s="l)L1196">1196 1266 crr2s="lhunp_association1226 , hmac_des="line" name="L121="lref=s42" id="L1131" cl12038e=retval" class="sref">re8valasocrAN_FRTX cla"sref">retval-8 ref="+cod8ef="+code=sctp_chunk_cach8p" cl86c" class="sref">soc, 1266 crr2s="l) s="liomment"> 2 * GFP_ATO8ICuass="sref">hmac"lportf="+code=asoc" "lportode=lass="sref">hmacsumsiissingf="+code=asoc" sumsiissingode= =>">ntohs(1255hmac"lportf="+code=asoc" "lportode=lass="sref">hmactypeef">auth_hdr">ntohs(auth_hdrhtons, 1266 crr2s="lm="sref">hmac_des"> ERROR_MISS_PARAMef">auth_hdr ERROR_MISS_PARAM="L1mL1196">1196 "lportf="+code=asoc" "lportode=)"42" id="L1131" class="line" name="L1138a="L1250" 8m_make_chunk.c#L1191" id=8L119187ct , 1266 crr2s="lm=sizeofae" name="2nt"> "lportf="+code=asoc" "lportode=),toc, size_8 87>1249 return chunk)81249 return 1196 skb_tail_pointer8042" id="L1131" class="line" name="L1138aref="+cod8sschunk.c#L1212l->8a hre87"linename="L1249">1249 return 8 1/* Report an InvalideMandatoryuP2r"srterl>uL" name="L1196">1196 1238 auth_hdrsk_t f">sctp_associationauth_hdr, 1226 1196 u""""""""""""""sf">sctp_association, 1196 sctp_association, 1266 crr2s="l)L1196">1196 2 * 1#L1InvalideMandatoryuP2r"srter Erro has no/p2yloadruL" name="L1196">1196 stoc, 1266 crr2s="l)L1196">1196 1oc, 1266 crr2s="lhunp_association1226 , time a new8 clas88e" name="L125f">soc, 1266 crr2s="l)2" id="L1131" class="line" name="L1138line"'8SN.Mis spa.Rclass' co8nt18289e=sctp_chunk" class="tsref">htons, 1266 crr2s="lm="sref">hmac_des"> ERROR_INV_PARAMef">auth_hdr ERROR_INV_PARAM="L1m=0)42" id="L1131" class="line" name="L1138spa.Rclass8#39; count1will name="L1481233 retu8s="L1250" 8#L1171" id="L1171" clacla8"L111892nk_hdr" clast/sctp/sm_make_chunk.c#L1Stop processingethis returuL" name="L1196">1196 042" id="L1131" class="line" name="L1138s"+code=hm8m_mis spa_ classclass="li8e" na894t 1249 return 8 sc895desc2" id="L1131" class="line" name="L1138s" class="8/a> ((sk_t f">sctp_associationauth_hdr, 1226 1196 81951f">uuuuucc""""""""""""""sf">sctp_associationauth_hdr, auth_hdr1196 1" class=frag" id"L1mi8eage,89ikely" class="sref">uuuuuuuuuuuuuuuuuuuuuuuuu>sk_t f">sctp_association, 1196 1188ineag89e" name="L1255">1255<="L125>ucc""""""""""""""sf">sctp_association, 1266 crr2s="l)L1196">1196 2 * 1266 9 1#L1This is alfatal erro l>uAny accumulated non-fatal erro s arL name="L1196">1196 pay9oad116">1166< Eventually"sref">uL1not "lporte;l name="L1196">1196 * for t"sref">uL" name="L1196">1196 soc, 1266 crr2s="l)L1196">1196 auth_hdr, 1266 crr2s="l)42" id="L1131" class="line" name="L1139m603">12039/a> asocrAN_FRTX cla"sref">retval-9n703">12039/+code=ske" name="L2195">9 clas90"line" name="t/sctp/sm_make_chunk.c#L1Create/ctperro retu/ctd fill i" in with/our1p2yloadruL" name="L1196">1196 12039/">1" class=frag" id"L1mi9line"90ikely" class=oc, 1266 crr2s="lhunp_association((1226 , hmac_desp2r"sef">auth_hdr12039/" id="L1168" claso3">1189ata1228 retu9"sref">cau9e_code, 042" id="L1131" class="line" name="L1139"class="li9ass="sref">retval, 1249 return retval, N9LLuHowever, do name="L1196">1196 12039/sctp/sm_make_chunk.c#L1294" id91class="line" name="L1254">1=* setd bacu/ct indiccto ao 1196 12039hunk.c#L1215" id="L1215" 9lass=91="sre="line" name="L1254">1=L" name="L1196">1196 12039=retval" class="sref">ret9alauth_hdrsk_t f">sctp_associationauth_hdr, 1226 1196 12039lass="line" name="L1216">9216uuuuuuuuuuuuuuuuuuunp/s=p_association = desc">, auth_hdr1196 1255<="L125>ucc""""""" f">sctp_association, 1196 a9ocucc""""""" f">sctp_association, 1266 crr2s="l)L1196">1196 struct 2 * , , ">ntohs( = auth_hdrhmacpef">auth_hdrhtons(12039ine" name="L1223">12231#L1Processingeof/1196 9mac1="sref">uLeABORTl>uIf we've accumulated any non-fatal erro s, 1196 12039ss="line" name="L1225">129592="sre="line" name="L1254">1="sref">uL would be screcognized p2r"srters/ctd we should not includL name="L1196">1196 12039ref="+code=sctp_auth_asoc9get_h92"linelass="comment"> * for t"sref">uL1a>em in 1196 12039/a> if (uL" name="L1196">1196 soc, 1266 crr2s="l)2" id="L1131" class="line" name="L1139n 9ULLhtonsauth_hdr, 1266 crr2s="l)42" id="L1131" class="line" name="L1139nclass="li9ke_chunk(1233 retu9a>->, 1266 crr2s="lhunp_association1226 , , soc, 1266 crr2s="l) s="liomment"> 2 * 9ULL, 1266 crr2s="lm="sref">hmac_des"> ERROR_DNS_FAILEDef">auth_hdr ERROR_DNS_FAILED="L1m=>, 12039ef">htons(, 1266 crr2s="lm=>, hmac_desp2r"sef">auth_hdrhmacv" id="L1248" clvref=)42" id="L1131" class="line" name="L1139n703">12039">htons(1249 return active_key9id1196 1239 9 94e=sctp_chunk""liurn>042" id="L1131" class="line" name="L1139lf">sctp_m9h_hdr" class="sref">auth_9dr1249 return ->skb, auth_hdr = desc">, auth_hdrhmac_9en 2 * 1249 94; , ">ntohs( = auth_hdrhmacpef">auth_hdrhtons( classp2r"shdrsref">auth_hdr12039>retval->12039ngth) + 042" id="L1131" class="line" name="L1139lke_chunk.9"sref">skb_tail_pointer(9kb1228 retu9p/sm_make_9hunk.c#L1249" id="L1249" 9lass=95e=sctp_chunk"for>sp/sm_make_chunkiref="+code=ntohidesce=>041p_association, 2 * sctp_m9=retval" class="sref">ret9alauth_hdrhmacext = htons = 2 * ->9250hmac_des"> CID_AUTHef">auth_hdr CID_AUTHt 1213 9p" class="9class="line" name="L1251"91251<953t 142" id="L1131" class="line" name="L1139p"+code=hm9" name="L1253">1253uuuuuuuuubreak42" id="L1131" class="line" name="L1139p hmac_des"> CID_ASCONFef">auth_hdr CID_ASCONFt 1213 9p603">12039 name="L1255">1255hmac_des"> CID_ASCONF_ACKef">auth_hdr CID_ASCONF_ACKt 1213 9p703">12039*************************9/1f">uuuuucc""p_association142" id="L1131" class="line" name="L1139pke_chunk.9ake_chunk.c#L1257" id="L1957" c95ikely" class="sref">uuuuuuuuuuuuubreak42" id="L1131" class="line" name="L1139p9e_chunk.9me="L1258">125812551249 return 1249 return sctp_m9ref">sctp_chunkify(st9uct <96 name="L1233">1233 retu9;="L1250" 9st struct 1196 * for t"sref">uLhINIT/INIT-ACK+f">ADD-IP is 1196 uL only+f">ADD-IP is iurned /s=atd we are/not bacuward-p/spctpble1196 1="sref">uLemon1196 12039e=retval" class="sref">re9val1="sref">uL" name="L1196">1196 sp_associationGFP_ATO9ICu"liurn>142" id="L1131" class="line" name="L1139 ="line" n9"L1154 ss="sref"31255" cl9ss="l96 name="L1228">1228 retu9ake_chunk.9#L1129" id="L1129" class=9line"97e=sctp_chunk"f">sp_associationauth_hdr042" id="L1131" class="line" name="L1139a="L1250" 9m_make_chunk.c#L1191" id=9L119197} size_9 973t 142" id="L1131" class="line" name="L1139a"+code=hm9" class="s2ef">chunk)91249 return skb_tail_pointer9auth_hdrsctp_associationauth_hdr, 1226 1196 ->9a hre97"line" name="L1206">1f">uuuuucc""""""""""unp/s=p_association = desc">, auth_hdr 2 * , ">ntohs( = auth_hdrhmacpef">auth_hdrhtons( classp2r"shdrsref">auth_hdr1238 1233 retu95="L1250" 9> sp/sm_make_chunkiref="+code=ntohidesce=>041p_association, 2 * auth_hdrhmacext = htons = 2 * ucase "sref">hmac_des"> CID_FWD_TSNef">auth_hdr CID_FWD_TSNt 1213 91114 9 sp_associationauth_hdr1213 91" class="9 1226 htonshmacprclasscapableef">auth_hdr111111111111111111111p/sm_make_chunk6">1226 htonshmacprclasscapableef">auth_hdr142" id="L1131" class="line" name="L11395de=GFP_AT9k.c#L1257" id="L1256" imp9uide-98ikely" class="sref">uuuuuuuuuuuuubreak42" id="L1131" class="line" name="L11395="line" n9" clasM1) E/a> time a new9 clas98e" name="L1255">1255<="L1case "sref">hmac_des"> CID_AUTHef">auth_hdr CID_AUTHt 1213 9line"'9SN.Mis spa.Rclass' co9nt18299e=sctp_chunk" class="111111111111p/sctp/sm_make_chunk.c#L1if 1196 * to yyyyyyyyyyyyyyyyyyyyyyyyyyyyy* supports AUTHl name="L1196">1196 116">1166< Eventually"sref">uyyyyyyyyyyyyyyyyyyyy*" name="L1196">1196 sp_associationauth_hdruuuuuuuuuuuuuuuuup/sm_make_chunk6">1226 htonshmacauth_capableef">auth_hdr142" id="L1131" class="line" name="L1139s114 9 sc99; hmac_des"> CID_ASCONFef">auth_hdr CID_ASCONFt 1213 9letval" cl9"+code=ske" name="L2195">91951f">ucase "sref">hmac_des"> CID_ASCONF_ACKef">auth_hdr CID_ASCONF_ACKt 1213 9lde=GFP_AT93">1" class=frag" id"L1mi9eage,99ikely" class="sref">uuuuuuuuuuuuuf">sp_associationauth_hdr1189ineag99e" name="L1255">1255<="L125>ucc""""""""""p/sm_make_chunk6">1226 htonshmacasconf_capableef">auth_hdr142" id="L1131" class="line" name="L1120, d="L1168" claso3">112020

d="L116donea>,
" id="L1131" class="line" name="L1120<1a>,
121320<2a>,
2020<3t 1249        return <20<4a>,
1249        return <20<5a>,
1249        return <20<6a>,
        >20<="sref">asocrAN_FRTX cla"sref">retval20<7a>,
20<"linelass="comment"> * for /* RFC 3.2.1e&c1196
1" class=frag" id"L1m20<">>20<1196
1120<" >201=* Ta hP2r"srter Types arL en>hmad such/1196
20e_" na="line" name="L1254">1=* highest-order two bits specify=a>L1actp/s/1196
retval, <20ass>20e0;
 mis spaan clast"> * to y* t="nn1if 1196
116">1166< Eventually*hP2r"srter Type. name="L1196">1196
retval, 20epan class="comment"> * for tL name="L1196">1196
20cod>20e="n2thref="net/sctp/sm_makei* 00 -1Stop processingethis p2r"srter;1do1not process any fur1196
1=*      p2r"srters/within 1196
20e="sre="line" name="L1254">1=L name="L1196">1196
re20=re>20e"linelass="comment"> * for t* 01 -1Stop processingethis p2r"srter,1do1not process any fur1196
20e1196
20ee" na="line" name="L1254">1=*      p2r"srter in ine'Ucrecognized P2r"srter' ERROR     g. name="L1196">1196
20cod>20co"sre="line" name="L1254">1=L name="L1196">1196
 * to y* 10 -1Skipethis p2r"srter=atd continue processing. name="L1196">1196
20c1"fas">116">1166< Eventually* name="L1196">1196
20cpan class="comment"> * for tL 11 -1Skipethis p2r"srter=atd continue processing but name="L1196">1196
122320c="n2thref="net/sctp/sm_makei*      "lport 1196
20cclass="line" name="L1254">1=*      'Ucrecognized P2r"srter' ERROR     g. name="L1196">1196
120ss=>20c="sre="line" name="L1254">1=L name="L1196">1196
20c"linelass="comment"> * for t* Rliurn>value: name="L1196">1196
>20c   IERROR_NO ERROR -1continue with/1196
20ce" na="line" name="L1254">1=*      ">   IERROR_ERROR    - stop atd "lport ctperro . name="L1196">1196
20+ca hrhref="net/sctp/sm_makeiL      ">   IERROR_NOMEME   - outeof/memory. name="L1196">1196
20+0;
 mis spaan clast"> * to y*" name="L1196">1196
20+2"srestctpc p_associationauth_hdr,
auth_hdrsk_t  f">sctp_associationauth_hdr,
1226        1196
 =
desc">,
auth_hdr1196
20+4t uuuuuuuuuuuuuuuuuuuuuuuuu f">sctp_association,
1196
20+;
sctp_association,
1266   crr2s="l)2" id="L1131" class="line" name="L1120+6a>,
htons(20+6kelys="liomment">  2      *
,
htons(h>20+7desc" class=fnt1p_association1266   retvalref=e=>">ntohs(   IERROR_NO ERRORef">auth_hdr   IERROR_NO ERRORdesc42" id="L1131" class="line" name="L1120+8a>,
active_ke20" c>20+ikely2" id="L1131" class="line" name="L1120+9a>,
((<>20+e" name="L125switch>sp/sm_make_chunkp2r"sef">auth_hdrhmacpef">auth_hdrhtonsauth_hdr   PARAM_ACTION_MASKef">auth_hdr   PARAM_ACTION_MASKss="s s="liomment">  2      *
,
1239        20"L1>20"L" name="L125case "sref">hmac_des">   PARAM_ACTION_DISCARDef">auth_hdr   PARAM_ACTION_DISCARDt 121320"1a>,
auth20h_h>20"1=sctp_chunk" class="p_association1266   retvalref=e=>>">ntohs(   IERROR_ERRORef">auth_hdr   IERROR_ERRORdesc42" id="L1131" class="line" name="L112042a>,
skb, >20"ct 20"3" name="L125case "sref">hmac_des">   PARAM_ACTION_SKIPef">auth_hdr   PARAM_ACTION_SKIPt 121320"4a>,
hmac20c_l>20"4t 1220s=">20"5" name="L125case "sref">hmac_des">   PARAM_ACTION_DISCARD_ERRef">auth_hdr   PARAM_ACTION_DISCARD_ERRt 121320"6a>,
retval->re>20"unk_hdr" class="sref"p_association1266   retvalref=e=>>">ntohs(   IERROR_ERRORef">auth_hdr   IERROR_ERRORdesc42" id="L1131" class="line" name="L112047a>,
) + 1lass="comment"> * for /* Fall/1196
skb_tail_pointer<20"sr>20"8" name="L125case "sref">hmac_des">   PARAM_ACTION_SKIP_ERRef">auth_hdr   PARAM_ACTION_SKIP_ERRt 121320"9a>,
20"e" name="L1255">12551#L1Mne" an ERROR     g,1prep2ringeenough room188< name="L1196">1196
20hu"fas">116">1166< Eventually"sref">uyyyyyyyyL1"liurningemultiple sctnown/p2r"srtersl name="L1196">1196
re20=re>20h0;
 mis spaan clast"> * to yyyyyyyyyyyyyyyyy*" name="L1196">1196
20hct sp_associationauth_hdr,
1266   crr2s="l)2" id="L1131" class="line" name="L112053a>,
,
1266   crr2s="lhunp_association,
1226        ,
1253<20" n>20h4t 1249        return <20h5a>,
20h;
soc,
1266   crr2s="l) s="liomment">  2      *
,
125520hunk_hdr" class="sref"ccccccccf">stp_association1266   crr2s="lm=>,
   ERROR_UNKNOWN_PARAMef">auth_hdr   ERROR_UNKNOWN_PARAM="L1mL1196">1196
1f">uuuuucc"""""""""""""">,
auth_hdr,
 =
auth_hdrhmacpef">auth_hdrhtons(1196
uuuuuuuuuuuuuuuuup_association,
1266   crr2s="lmL1196">1196
125820he" name="L1255">1255<="L125>ucc"""""""""""""""""""""">,
auth_hdr,
 =
auth_hdrhmacpef">auth_hdrhtons(1196

>20n>" name="L1255">1255<="L125>ucc"""""""""""""""""""""">,
auth_hdrhmacv" id="L1248" clvref=)42" id="L1131" class="line" name="L1120n1a>,
sctp_chunkify(s20ref>20n1=sctp_chunk" class="} else s="liomment">  2      *
,
1#L1If generatingethe ERRORdeame="L1196">1196
 * for t"sref">uuuuuuuuuuuuuuuuu* "lport cs specified, s="ABORTcwill be triggered name="L1196">1196
20n="n2thref="net/sctp/sm_makei"sref">uuuuuuuuuuuuuuuuu* ao L1anet/sctp/s won't be name="L1196">1196
1="sref">uuuuuuuuuuuuuuuuu* establishe;l name="L1196">1196
r20e=r>20n="sre="line" name="L1254">1="sref">uuuuuuuuuuuuuuuuu*" name="L1196">1196
20n"line" name="L1206">1f">uuuuup_association1266   retvalref=e=>">ntohs(   IERROR_NOMEMef">auth_hdr   IERROR_NOMEMdesc42" id="L1131" class="line" name="L112068a>,
GFP_AT20MIC>20nikely" class="sref">uname="L1249">1249        return <2069a>,
20ne" name="L1255">125520#L" name="L125default3" class="line" name="L1213">12132071a>,
20#1=sctp_chunk" class="break42" id="L1131" class="line" name="L112072a>,
20#ct 1249        return <2073a>,
size20n&q>20#>,
chunk20" c>20#4t p_association1266   retvalref=42" id="L1131" class="line" name="L112075a>,
20#5t 1249        return <2076a>,
skb_tail_pointer20#="sref">asocrAN_FRTX cla"sref">retval2077a>,
->20ssc>20#"linelass="comment"> * for /* Verify variable s" cla/p2r"srters name="L1196">1196
values: name="L1196">1196
1=*      ">   IERROR_ABORTc- trigger s="ABORT name="L1196">1196
   IERROR_NOMEM - outeof/memory (abort) name="L1196">1196
 * to y*      ">   IERROR_ERROR -1stop processing, trigger s="ERRORdeame="L1196">1196
  >20>1"fas">116">1166< Eventually*h     ">   IERROR_NO ERROR -1continue with/1196
 * for tL" name="L1196">1196
20>4"srestctpc p_associationauth_hdr,
auth_hdrsk_t  f">sctp_associationauth_hdr,
1226        1196
20>;
 =
desc">,
auth_hdr1196
20>unk_hdr" class="sref"ccccccccccccccccccccccccp_associationauth_hdr,
1196
1f">uuuuucc"""""""""""""" f">sctp_association,
1196
20>ikely" class="sref">uuuuuuuuuuuuuuuuuu""""""" f">sctp_association,
 time a ne20" c>20>9kelys="liomment">  2      *
,
20SN" name="L125sf">sctp_associationauth_hdr,
 =
20S1=sctp_chunk"fnt1p_association1266   retvalref=e=>">ntohs(   IERROR_NO ERRORef">auth_hdr   IERROR_NO ERRORdesc42" id="L1131" class="line" name="L112092a>,
20S2nk_hdr" clast,
,
20S3=sctp_chunk"fnt1p_association20S4t 1249        return <2095a>,
ass="comment"> * for /* FIXME -1This routgap is not lookingeat eaca/p2r"srter per tae name="L1196">1196
>20S="sre="line" name="L1254">1="sref">uL t/sct type, i.e., screcognized p2r"srters/should be fur1196
20S"linelass="comment"> * for t"sref">uL1id foified based /s=1196
1" class=frag" id"L1m203">>20SuL" name="L1196">1196
11208" >20S name="L1228">1228                ret21,
d="L1168" claso3">112121sp/sm_make_chunkp2r"sef">auth_hdrhmacpef">auth_hdrhtonsauth_hdr  2      *
,
hmac_des">   PARAM_IPV4_ADDRESSef">auth_hdr   PARAM_IPV4_ADDRESSt 121321<2a>,
21hmac_des">   PARAM_IPV6_ADDRESSef">auth_hdr   PARAM_IPV6_ADDRESSt 121321<3a>,
hmac_des">   PARAM_COOKIE_PRESERVATIVEef">auth_hdr   PARAM_COOKIE_PRESERVATIVEt 121321<4a>,
hmac_des">   PARAM_SUPPORTED_ADDRESS_TYPESef">auth_hdr   PARAM_SUPPORTED_ADDRESS_TYPESt 121321<5a>,
hmac_des">   PARAM_STATE_COOKIEef">auth_hdr   PARAM_STATE_COOKIEt 121321<6a>,
        >2106" name="L125case "sref">hmac_des">   PARAM_HEARTBEAT_INFOef">auth_hdr   PARAM_HEARTBEAT_INFOt 121321<7a>,
2107" name="L125case "sref">hmac_des">   PARAM_UNRECOGNIZED_PARAMETERSef">auth_hdr   PARAM_UNRECOGNIZED_PARAMETERSt 121321<8a>,
1" class=frag" id"L1m21<">>2108" name="L125case "sref">hmac_des">   PARAM_ECN_CAPABLEef">auth_hdr   PARAM_ECN_CAPABLEt 121321<9a>,
1121<" >2109" name="L125case "sref">hmac_des">   PARAM_ADAPTATION_LAYER_INDef">auth_hdr   PARAM_ADAPTATION_LAYER_INDt 1213211/a>,
, 1255retval, <21ass>211 name="L1233">1233                ret2112a>,
hmac_des">   PARAM_SUPPORTED_EXTef">auth_hdr   PARAM_SUPPORTED_EXTt 12132113a>,
retval, 2113t stp_associationauth_hdrauth_hdr1196
21cod>2114t uuuuu"liurn>p_association   IERROR_ABORTef">auth_hdr   IERROR_ABORT nsc42" id="L1131" class="line" name="L112115a>,
211;
211="sref">asocrAN_FRTX cla"sref">retval2117a>,
re21=re>2117" name="L125case "sref">hmac_des">   PARAM_SET_PRIMARYef">auth_hdr   PARAM_SET_PRIMARYt 12132118a>,
211ikely" class="sref">uf">sp_associationauth_hdr211e" name="L1255">1255<="L125>ubreak42" id="L1131" class="line" name="L11212/a>,
21cod>212>" name="L1255">1255hmac_desfallauth_hdr1233                ret2122a>,
hmac_des">   PARAM_HOST_NAME_ADDRESSef">auth_hdr   PARAM_HOST_NAME_ADDRESSt 12132123a>,
ass="comment"> * for /* Tell/uL" name="L1196">1196
12232124t auth_hdr1226        ,
auth_hdr,
,
212;
1266   retvalref=e=>">ntohs(   IERROR_ABORTef">auth_hdr   IERROR_ABORT nsc42" id="L1131" class="line" name="L112126a>,
121ss=>212unk_hdr" class="sref"break42" id="L1131" class="line" name="L112127a>,
>2128" name="L125case "sref">hmac_des">   PARAM_FWD_TSN_SUPPORTef">auth_hdr   PARAM_FWD_TSN_SUPPORTt 12132129a>,
212e" name="L1255">1255sp_associationauth_hdr213>" name="L1255">1255<="L125>ubreak42" id="L1131" class="line" name="L112131a>,
(hmac_desfallauth_hdr213}
hmac_des">   PARAM_RANDOMef">auth_hdr   PARAM_RANDOMt 121321+4a>,
21+4t stp_associationauth_hdr21+;
hmac_desfallauth_hdrhtons(213="sref">asocrAN_FRTX cla"sref">retval21+7a>,
htons(h>213"line" name="L1206">1lass="comment"> * for /* ">  -AUTH: Secp/s=6.1 name="L1196">1196
active_ke21" c>213uuuuuuuuuL1If 1196
(<>213e" na="line" name="L1254">1="sref">uuuuuuuuuL1MUST be aborted.>uTa hABORTc retu1SHOULD1contais=1196
1239        21"L1>214u"fas">116">1166< Eventually"sref">uyyyyyyyyL1aausL 'Protocol Violctp/s'l name="L1196">1196
,
auth21h_h>2140;
 mis spaan clast"> * to yyyyyyyyyyyyyyyyy*" name="L1196">1196
skb, >21"ct sp_association   AUTH_RANDOM_LENGTHef">auth_hdr   AUTH_RANDOM_LENGTHt 1196
2143t  =
auth_hdrhmacpef">auth_hdrhtons( classp2r"shdrsref">auth_hdr  2      *
,
hmac21c_l>21"4t ((1226        ,
auth_hdrhmacpef">auth_hdr1196
1221s=">214;
,
,
,
retval->re>21"unk_hdr" class="sref"cccccccc>,
1266   retvalref=e=>">ntohs(   IERROR_ABORTef">auth_hdr   IERROR_ABORT nsc42" id="L1131" class="line" name="L112147a>,
) + 1name="L1249">1249        return <2148a>,
skb_tail_pointer<21"sr>214ikely" class="sref">ubreak42" id="L1131" class="line" name="L1121"9a>,
214 name="L1228">1228                ret215/a>,
215L" name="L125case "sref">hmac_des">   PARAM_CHUNKSef">auth_hdr   PARAM_CHUNKSt 121321h1a>,
re21=re>2151=sctp_chunk" class="f">stp_associationauth_hdr21hct hmac_desfallauth_hdr,
1253<21" n>2154t  * for /* ">  -AUTH: Sectp/s 3.2 name="L1196">1196
215class="line" name="L1254">1="sref">uuuuuuuuu* Ta hCHUNKS/p2r"srter MUST be included /sce in 1196
1255215="sre="line" name="L1254">1="sref">uuuuuuuuu*  INIT-ACK  retu1if 1196
 * for t"sref">uuuuuuuuu*  t/scts.>uIts maximum s" cla/is 260 bytesl name="L1196">1196
uuuuuuuuuL" name="L1196">1196
125821he" name="L1255">1255s260 <ad>,
auth_hdrhmacpef">auth_hdrhtons(  2      *
,

1255<="L125>u>,
((1226        ,
auth_hdrhmacpef">auth_hdr1196
sctp_chunkify(s21ref>21n1=sctp_chunk" class="""""""""""""""""""""""""""""""""""""">,
,
21nct 1266   retvalref=e=>">ntohs(   IERROR_ABORTef">auth_hdr   IERROR_ABORT nsc42" id="L1131" class="line" name="L112163a>,
                     21/a>>2163t 1249        return <2164a>,
2164t r21e=r>2166" name="L125case "sref">hmac_des">   PARAM_HMAC_ALGOef">auth_hdr   PARAM_HMAC_ALGOt 12132167a>,
1f">stp_associationauth_hdrGFP_AT21MIC>21nikely" class="sref">uuuuuuuuugoto "sref">hmac_desfallauth_hdr216 name="L1228">1228                ret217/a>,
217>" name="L1255">1255<"sref">hmac_deshmac> =
sctp_associationauth_hdr,
auth_hdrhmacpef">auth_hdr(>,
auth_hdrhmacpef">auth_hdrhtons( classp2r"shdrsref">auth_hdr142" id="L1131" class="line" name="L112172a>,
217}
size21n&q>2173t  * for /* ">  -AUTH: Sectp/s 6.1 name="L1196">1196
chunk21" c>217="n2thref="net/sctp/sm_makei"sref">uuuuuuuuu* Ta hHMAC algorithm based /s=SHA-1 MUST be supported and name="L1196">1196
217class="line" name="L1254">1="sref">uuuuuuuuu* included in 1196
skb_tail_pointer217="sre="line" name="L1254">1="sref">uuuuuuuuu*" name="L1196">1196
1for>ae" name="2nt"> iref="+code=ntohidesce=>041p_association,
  2      *
,
     21t s>217ikely" class="sref">uuuuuuuuup_association =
ref=lass="sref">htons =
1228                ret218/a>,
          >218>" name="L1255">1255<="L125>uf">sp_associationntohs(   AUTH_HMAC_ID_SHA1"L1263" class="">   AUTH_HMAC_ID_SHA1  >218ct 1249        return <2183a>,
218>,
2184t sp_associationntohs(   AUTH_HMAC_ID_SHA1"L1263" class="">   AUTH_HMAC_ID_SHA1  2      *
,
21>;
((1226        ,
auth_hdrhmacpef">auth_hdr,
  2      *
,
,
1f">uuuuui,
1266   retvalref=e=>">ntohs(   IERROR_ABORTef">auth_hdr   IERROR_ABORT nsc42" id="L1131" class="line" name="L112188a>,
21>ikely" class="sref">uname="L1249">1249        return <2189a>,
 time a ne21" c>218e" name="L1255">1255hmac_desfallauth_hdr12132191a>,
12132192a>,
219ct ntohs(   DEBUG_PRINTKef">auth_hdr   DEBUG_PRINTK/sm_mp"line" name=string">"Ucrecognized p2r"s: %d1for> retu1%d.\n" name="e="liomment">  2      *
,
ntohs( =
auth_hdrhmacpef">auth_hdrhtonsauth_hdr,
2194t 1266   retvalref=e=>">ntohs(auth_hdr1226        ,
auth_hdr,
,
219;
>219unk_hdr" clasname="L1249">1249        return <2197a>,
219"line" name=""liurn>p_association1266   retvalref=42" id="L1131" class="line" name="L112198a>,
1" class=frag" id"L1m213">>21S1249        return <2199a>,
11218" >21S name="L1228">1228                ret22,
d="L1168" claso3">1122220u"fas">116">1166< Eventuall/* Verify uL" name="L1196">1196
22<1=sctfnt1p_associationauth_hdrsk_t  f">sctp_associationauth_hdr,
1226        1196
220ct auth_hdr,
1196
2203t auth_hdr,
auth_hdr1196
2204t sctp_association,
1196
220;
sctp_association,
1266   crr2s="l)2" id="L1131" class="line" name="L1122<6a>,
        >2206kelys="liomment">  2      *
,
2207" name="L125unp/s=p_association =
desc">,
auth_hdr1" class=frag" id"L1m22<">>2208" name="L125fnt1p_associationauth_hdr042" id="L1131" class="line" name="L1122<9a>,
1122<" >2209" name="L125fnt1p_association221>" na2" id="L1131" class="line" name="L112211a>,
retval, <22ass>2211=sctp_chunk"">116">1166< Eventuall/* Verify  f"eam>values are non-zero.uL" name="L1196">1196
s(0e==>">ntohs(auth_hdrhtonshmacnum_outbound_ f"eam> =
1196
retval, 2213t ntohs(auth_hdrhtonshmacnum_inbound_ f"eam> =
1196
22cod>2214t ntohs(auth_hdrhtonshmacinit1196
   DEFAULT_MINWINDOWef">auth_hdr   DEFAULT_MINWINDOWdesc >ad>,
1266   sauth_hdrhtonshmaca_rwnd"L1263" class="a_rwndref=))) s="liomment">  2      *
,
221="sref">asocrAN_FRTX cla"sref">retval2217a>,
re22=re>221"line" name="L1206">1"liurn>p_association1226        ,
,
1266   crr2s="l)42" id="L1131" class="line" name="L112218a>,
221ikely" class=name="L1249">1249        return <2219a>,
1228                ret222/a>,
22cod>222>" name="L125">116">1166< Eventuall/* Check1for>missing mandatory/p2r"srtersl>uL" name="L1196">1196
 =
/sm_make_chunk.c#L12p2r"sef">auth_hdr,
auth_hdrhmacp2r"s> =
/sm_) s="liomment">  2      *
,
,
sp_association   PARAM_STATE_COOKIEef">auth_hdr   PARAM_STATE_COOKIEt ">ntohs(auth_hdrhmacpef">auth_hdrhtonsauth_hdr,
12232224t auth_hdr142" id="L1131" class="line" name="L112225a>,
222class2" id="L1131" class="line" name="L112226a>,
122ss=>222unk_hdr" clas}5">116">1166< Eventuall/* for>aloop/1196
22c"line2" id="L1131" class="line" name="L112228a>,
        if ( * for /* Taere is a possibility 1196
222e" na="line" name="L1254">1="sref">u* in 1196
223u"fas">116">1166< Eventually"sref">u* Ta hcurrtua p2r"s.p would pofnt1atethe bad onel name="L1196">1196
2230;
 mis spaan clast"> * to yyyyyyyyy* Currtua >sk_ensus /s=generate a PROTOCOL name="L1196">1196
2231"fas">116">1166< Eventuallyyyyyyyyy* VIOLATION erro l>uWe buildethe ERROR> retu1aere atd letethe normalreame="L1196">1196
 * for t"sref">u* erro  handlingeion< buildeatd sendethe p2cketl name="L1196">1196
223="n2thref="net/sctp/sm_makei"sref">uL" name="L1196">1196
22+;
sp_associationauth_hdrhmacv" id="L1248" clvref=e!=>(voido)c,
htons,
htons(223unk_hdr" class="sref""liurn>p_association((1226        ,
auth_hdrhmacpef">auth_hdr,
,
1266   crr2s="l)42" id="L1131" class="line" name="L1122+7a>,
htons(h>223"line2" id="L1131" class="line" name="L1122+8a>,
active_ke22" c>2238" name="L125>ass="comment"> * for /* Tae /sly>missing mandatory/p2r"s possible today is name="L1196">1196
(<>223e" na="line" name="L1254">1="sref">u* ineINIT-ACK  retul name="L1196">1196
1239        22"L1>224u"fas">116">1166< Eventually"sref">uL" name="L1196">1196
,
auth22h_h>2241
ssp_association   CID_INIT_ACKef">auth_hdr   CID_INIT_ACKt ">ntohs(auth_hdr,
skb, >22"ct p_associationauth_hdr1226        ,
auth_hdr   PARAM_STATE_COOKIEt 1196
2243t ,
1266   crr2s="l)42" id="L1131" class="line" name="L1122"4a>,
hmac22c_l>2244t 1249        return <2245a>,
1222s=">224;
 * for /* Verify all/1196
,
retval->re>22"unk_hdr" clas"_association =
/sm_make_chunk.c#L12p2r"sef">auth_hdr,
auth_hdrhmacp2r"s> =
/sm_) s="liomment">  2      *
,
) + skb_tail_pointer<22"sr>224ikely" class="sref">up_associationntohs(auth_hdr1226        ,
auth_hdr,
,
1266   crr2s="l)42" id="L1131" class="line" name="L1122"9a>,
224e" name="L1255">1255sp/sm_make_chunkresult =
  2      *
,
225>" name="L1255">1255<="L1case "sref">hmac_des">   IERROR_ABORTef">auth_hdr   IERROR_ABORT nsc3" class="line" name="L1213">121322h1a>,
re22=re>2251=sctp_chunk" class="="L1case "sref">hmac_des">   IERROR_NOMEMef">auth_hdr   IERROR_NOMEM nsc3" class="line" name="L1213">121322h2a>,
22hct 042" id="L1131" class="line" name="L112253a>,
hmac_des">   IERROR_ERRORef">auth_hdr   IERROR_ERRORdesc3" class="line" name="L1213">121322h4a>,
1253<22" n>2254t 142" id="L1131" class="line" name="L1122h5a>,
225;
hmac_des">   IERROR_NO ERRORef">auth_hdr   IERROR_NO ERRORdesc3" class="line" name="L1213">121322h6a>,
1255225unk_hdr" class="sref"ccccdefault3" class="line" name="L1213">12132257a>,
225"line" name="L1206">1f">uuuuucc""""""break42" id="L1131" class="line" name="L112258a>,
uname="L1249">1249        return <2259a>,
1258225 name="L1228">1228                ret226/a>,

116">1166< Eventuall/* for>aloop/1196
sctp_chunkify(s22ref>226 name="L1233">1233                ret2262a>,
142" id="L1131" class="line" name="L112263a>,
                     22/a>>2263t 1249        return <2264a>,
2264t 1249        return <2265a>,
        struct >226class="line" name="L1254">1/* Unp2ckethe p2r"srters in ineINIT packet into ineanet/sctp/sl name="L1196">1196
r22e=r>226="sre="line" name="L1254">1=* Rliurns 0 /s=failure, else successl name="L1196">1196
226"linelass="comment"> * for t* FIXME: 1This is aneanet/sctp/s srthodl name="L1196">1196
GFP_AT22MIC>2261196
226 namefnt1p_associationauth_hdrsctp_associationauth_hdr,
1226        sctp_association,
1196
227>" name="L1255">1255<=,
1196
auth_hdr,
auth_hdrauth_hdrauth_hdr,
227}
  2      *
,
size22n&q>2273t  =
desc">,
auth_hdrchunk22" c>2274t sctp_association,
2275t sctp_association,
 =
,
auth_hdrskb_tail_pointer2276t sctp_association,
,
,
auth_hdr042" id="L1131" class="line" name="L11228/a>,
          >228>" na2" id="L1131" class="line" name="L112281a>,
2281=sctp_chunk"">116">1166< Eventuall/* We must includeethe address 1196
  >2281"fas">116">1166< Eventuallyyyyyyyyy* This is tae /sly>address ineINIT p2cketl name="L1196">1196
 * for t"sref">u* When processing a COOKIE ECHO, we "lirieveethe from>address name="L1196">1196
228="n2thref="net/sctp/sm_makei"sref">uL of 1196
228class="line" name="L1254">1="sref">uL" name="L1196">1196
228="sref">asocrAN_FRTX cla"sref">retval2287a>,
 * for /* Tais imple* foctp/s defaults to>ef"ingethe first transportdeame="L1196">1196
228u*>added as tae primary transport.>uTa hsource address seems todeame="L1196">1196
 time a ne22" c>228e" na="line" name="L1254">1="sref">u* be a a better=choiceethaneany of 1196
116">1166< Eventually"sref">uL" name="L1196">1196
2291
auth_hdr1226        ,
auth_hdr,
auth_hdr   ACTIVEdesc))href="net/sctp/sm_make_chunk.c#L12512292a>,
229ct hmac_desnomesef">auth_hdr229>,
sp_associationauth_hdrauth_hdr,
229;
142" id="L1131" class="line" name="L112296a>,
        >229="sref">asocrAN_FRTX cla"sref">retval2297a>,
229"line" name=">ass="comment"> * for /* Process uL" name="L1196">1196
1" class=frag" id"L1m223">>2298" name="L125>_association =
/sm_make_chunk.c#L12p2r"sef">auth_hdr,
auth_hdrhmacp2r"s> =
/sm_) s="liomment">  2      *
,
11228" >229e" name="L1255">1255stp_associationauth_hdrhmacpef">auth_hdrhtonsauth_hdr">ntohs(   PARAM_IPV4_ADDRESSef">auth_hdr   PARAM_IPV4_ADDRESSode=e||L1196">1196
1123230>" name="L1255">1255<=auth_hdrhmacpef">auth_hdrhtonsauth_hdr">ntohs(   PARAM_IPV6_ADDRESSef">auth_hdr   PARAM_IPV6_ADDRESSode=)) s="liomment">  2      *
,
,
ntohs(        classget_af_specifi1/sm_make_chunk.c#L12p2r"s_type26f"L1263" class="p2r"s_type26f/sm_make_chunk.c#L12p2r"sef">auth_hdrhmacpef">auth_hdrhtonsauth_hdr230ct ,
htonsauth_hdr,
,
auth_hdrhmac6ddr"L1263" class="addr="L1e2" id="L1131" class="line" name="L1123<3a>,
,
htonshtonsauth_hdr2304t sp_associationauth_hdrauth_hdr,
230;
,
142" id="L1131" class="line" name="L1123<6a>,
        >230unk_hdr" class="sref"name="L1249">1249        return <23<7a>,
230"line2" id="L1131" class="line" name="L1123<8a>,
1" class=frag" id"L1m23<">>230ikely" class="sref">uf">stp_associationauth_hdr1226        ,
auth_hdr,
auth_hdr,
1123<" >230e" name="L1255">1255<<<<<<<<hmac_desclean_upef">auth_hdr231>" name="L125}2" id="L1131" class="line" name="L112311a>,
retval, <23ass>231 name="L1233">1233                ret2312a>,
ass="comment"> * for /* source address of> retu1may not intcheany valid addressuL" name="L1196">1196
retval, 2313t stp_association23cod>2314t hmac_desclean_upef">auth_hdr2316t  * for /* AUTH: After=processing the p2r"srters,>ef"e sure 1196
re23=re>231"linelass="comment"> * for t"sref">u* have1all/pot foially do auth foicationsl name="L1196">1196
231u*" name="L1196">1196
2319t sp/sm_make_chunk6">1226        htonsauth_hdrhmac6uth_capableef">auth_hdr1226        htonsauth_hdrhmacpeeo_randosef">auth_hdr1196
23cod>232>" name="L1255">1255<="L125>uuuuuuuuuuuuuuuuutp_association1226        htonsauth_hdrhmacpeeo_hmac> =
,
        struct >2321=sctp_chunk" class=">,
1226        htonsauth_hdrhmac6uth_capableef">auth_hdr042" id="L1131" class="line" name="L112322a>,
,
ass="comment"> * for /* In a non-backward "> patible mhma,1if 1196
1223232="n2thref="net/sctp/sm_makei"sref">uL support for>ADD-IP but not AUTH,  1196
232class="line" name="L1254">1="sref">uL uTa hsectp/s name="L1196">1196
123ss=>232="sre="line" name="L1254">1="sref">u*1also give us aneoptp/s to>sil54"ly ignoreethe p2cket, which/same="L1196">1196
232"linelass="comment"> * for t"sref">u* is what we'll/do aerel name="L1196">1196
>232u*" name="L1196">1196
2329t stp_association1196
233>" name="L1255">12sp/sm_make_chunk6">1226        htonsauth_hdrhmac6sconf_capableef">auth_hdr1226        htonsauth_hdrhmac6uth_capableef">auth_hdr  2      *
,
(1226        htonsauth_hdrhmac6ddip_disabled*   PARAM_ADD_IPef">auth_hdr   PARAM_ADD_IPode=e|="liomment">  2      *
,
233ct    PARAM_DEL_IPef">auth_hdr   PARAM_DEL_IPode=e|="liomment">  2      *
,
,
   PARAM_SET_PRIMARYef">auth_hdr   PARAM_SET_PRIMARY/sm_);L1196">1196
2334t 1226        htonsauth_hdrhmac6sconf_capableef">auth_hdr042" id="L1131" class="line" name="L1123+5a>,
233;
hmac_desclean_upef">auth_hdrhtons(233unk_hdr" clasname="L1249">1249        return <23+7a>,
htons(h>233"line2" id="L1131" class="line" name="L1123+8a>,
active_ke23" c>2338" name="L125>ass="comment"> * for /* Walkelist of 1196
(<>2339t hmac_deslist_for_each_safeef">auth_hdr =
htonsauth_hdr,
1226        htonsauth_hdrhmactransportsaddr_listef">auth_hdr  2      *
,
1239        23"L1>234>" name="L1255">1255hmactransportef">auth_hdr">ntohs(sctp_associationhtonsauth_hdr1196
,
auth23h_h>2341=sctp_chunk" class="f">sp/sm_make_chunktransportef">auth_hdrhtonsntohs(   UNKNOWNef">auth_hdr   UNKNOWN/sm_) s="liomment">  2      *
,
skb, >23"ct 1255hmacclassanet/srm_peeoef">auth_hdr1226        ,
auth_hdr1196
,
, 0, 1249        return <23"4a>,
hmac23c_l>2344nk_hdr" clasname="L1249">1249        return <2345a>,
1223s=">234class2" id="L1131" class="line" name="L1123"6a>,
retval->re>2346t  * for /* The fixed INIT headers are always in 31"work byte name="L1196">1196
234"linelass="comment"> * for t"sref">u* orderl name="L1196">1196
skb_tail_pointer<23"sr>234u*" name="L1196">1196
,
2349t hmac_des6">1226        htonsauth_hdrhmacief">auth_hdrhmacinit1196
235>" name="L1255">1255hmacs1266   sauth_hdrhtonshmacinit1196
re23=re>2351=sctp_chunk""_association1226        htonsauth_hdrhmacief">auth_hdrhmaca_rwnd"L1263" class="a_rwndref= =L1196">1196
23hct hmacs1266   sauth_hdrhtonshmaca_rwnd"L1263" class="a_rwndref=);L1196">1196
1226        htonsauth_hdrhmacief">auth_hdrhmacnum_outbound_ f"eam> =
1196
1253<23" n>2354t hmacs =
auth_hdrhtonshmacnum_outbound_ f"eam> =
1196
235;
1226        htonsauth_hdrhmacief">auth_hdrhmacnum_inbound_ f"eam> =
1196
1255235unk_hdr" class="sref"ass="sref">hmacs =
auth_hdrhtonshmacnum_inbound_ f"eam> =
1196
1226        htonsauth_hdrhmacief">auth_hdrhmacinitial_tssef">auth_hdr1196
uass="sref">hmacs1266   sauth_hdrhtonshmacinitial_tssef">auth_hdr1196
1258235 name="L1228">1228                ret236/a>,

116">1166< Eventuall/* Apply output  f"eams based on peeo's name="L1196">1196
sctp_chunkify(s23ref>2360;
 mis spaan clast"> * to yyyyyyyyy* /umber of inbound  f"eamsl name="L1196">1196
2361"fas">116">1166< Eventuallyyyyyyyyy*" name="L1196">1196
s"_association1226        htons        c/sm_lass="sref">hmacsinit =
t 1196
2364t hmacs =
auth_hdrhtonshmacnum_inbound_ f"eam> =
  2      *
,
        struct >236;
1226        htons        c/sm_lass="sref">hmacsinit =
t 1196
r23e=r>236unk_hdr" class="sref"cccccodeass="sref">hmacs =
auth_hdrhtonshmacnum_inbound_ f"eam> =
1196
236"line" name="name="L1249">1249        return <2368a>,
GFP_AT23MIC>2361249        return <2369a>,
2369t sp/sm_make_chunk6">1226        htons        c/sm_lass="sref">hmacsinit =
/sm_e&ss=L1196">1196
237>" name="L1255">1ass="sref">hmacs =
auth_hdrhtonshmacnum_outbound_ f"eam> =
  2      *
,
23#1=sctp_chunk" class="p/sm_make_chunk6">1226        htons        c/sm_lass="sref">hmacsinit =
/sm_e=L1196">1196
237ct 1255hmacs =
auth_hdrhtonshmacnum_outbound_ f"eam> =
1196
size23n&q>2373t 1249        return <23#4a>,
chunk23" c>2374t 1249        return <23#5a>,
237;
 * for /* Copy Initiatp/s tag from>INIT to VT_peeo in cookielyyy*" name="L1196">1196
skb_tail_pointer237unk_hdr" clas"_association1226        htons        c/sm_lass="sref">hmacpeeo_vtag"L1263" class="peeo_vtagdesce=>">ntohs(1226        htonsauth_hdrhmacief">auth_hdrhmacinit1196
 * for /* Peeo Rwnd   : Currtua >alculated value of uL" name="L1196">1196
hmac_des6">1226        htonsauth_hdrhmacrwnd"L1263" class="rwndref= =>">ntohs(1226        htonsauth_hdrhmacief">auth_hdrhmaca_rwnd"L1263" class="a_rwndref==L1196">1196
116">1166< Eventuall/* Copy cookie in case we need to resendeCOOKIE-ECHO.uL" name="L1196">1196
  >2382t hmac_des"ookieef">auth_hdr">ntohs(1226        htonsauth_hdrhmac"ookieef">auth_hdrs"_associationauth_hdr  2      *
,
2384t 1226        htonsauth_hdrhmac"ookieef">auth_hdr">ntohs(auth_hdrauth_hdr,
1226        htonsauth_hdrhmac"ookie_lesef">auth_hdr,
auth_hdr238;
stp_association1226        htonsauth_hdrhmac"ookieef">auth_hdr,
hmac_desclean_upef">auth_hdr1249        return <2388a>,
2381249        return <2389a>,
 time a ne23" c>2389=sctp_chunk"">116">1166< Eventuall/* RFC 2960 7.2.1 The initial value of sst"L1sh MAY be arbitrarily name="L1196">1196
116">1166< Eventually"sref">uL high (for>example, imple* foctp/ss MAY useethe size of 1196
2390;
 mis spaan clast"> * to yyyyyyyyy* adveotised window)l name="L1196">1196
2391"fas">116">1166< Eventuallyyyyyyyyy*" name="L1196">1196
2393t auth_hdr,
1226        htonsauth_hdrhmactransportsaddr_listef">auth_hdr2394t hmactransportsef">auth_hdr  2      *
,
auth_hdrhtons">ntohs(1226        htonsauth_hdrhmacief">auth_hdrhmaca_rwnd"L1263" class="a_rwndref==L1196">1196
>239unk_hdr" clasname="L1249">1249        return <2397a>,
239"line2" id="L1131" class="line" name="L112398a>,
1" class=frag" id"L1m233">>2398" name="L125>ass="comment"> * for /* Set up uL" name="L1196">1196
11238" >2399t stp_associationauth_hdr,
1226        htonsauth_hdrhmactsnef=pef">auth_hdr,
auth_hdr   TSN_MAP_INITIAL/sm_e2" id="L1131" class="line" name="L1124,
d="L1168" claso3">1124240>" name="L1255">1255<=1226        htonsauth_hdrhmacief">auth_hdrhmacinitial_tssef">auth_hdrauth_hdr,
hmac_desclean_upef">auth_hdr240}
2403t 116">1166< Eventuall/* RFC 2960 6.5 Sf"eam Id foifier>ind Sf"eam Sequence Number name="L1196">1196
240="n2thref="net/sctp/sm_makei"sref">uL name="L1196">1196
240class="line" name="L1254">1="sref">uL Ta hsf"eam sequence /umber in ill/1196
>240="sre="line" name="L1254">1="sref">u*1from>0 when the anet/sctp/s is establishedl>uAlso, when thedeame="L1196">1196
240"linelass="comment"> * for t"sref">u* sf"eam sequence /umber reaches 1196
1" class=frag" id"L1m24<">>240u*>sf"eam sequence /umber shill/b hset to 0l name="L1196">1196
1124<" >240e" na="line" name="L1254">1="sref">u*" name="L1196">1196
241>" na2" id="L1131" class="line" name="L112411a>,
retval, <24ass>2411=sctp_chunk"">116">1166< Eventuall/* Allocate  forage for>it is not a temporary name="L1196">1196
116">1166< Eventuallyyyyyyyyy* anet/sctp/sl name="L1196">1196
retval, 241pan class="comment"> * for t"sref">u*" name="L1196">1196
24cod>2414t stp_association1226        htonsauth_hdr  2      *
,
241;
auth_hdr241="sref">asocrAN_FRTX cla"sref">retval2417a>,
re24=re>241"line" name="L1206">1p_association1226        htonsntohs(auth_hdr1226        htons        c/sm_lass="sref">hmacsinit =
/sm_e2" id="L1131" class="line" name="L112418a>,
241ikely" class="sref">uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuake_chunk.c#L126">1226        htons        c/sm_lass="sref">hmacsinit =
t ,
auth_hdr241e" name="L1255">1255stp_association1226        htons,
24cod>242>" name="L1255">1255<="L125>ugoto "sref">hmac_desclean_upef">auth_hdr1233                ret2422a>,
hmacerrooef">auth_hdr">ntohs(1226        ,
auth_hdr2423t 1255sass="sref">hmacerrooef">auth_hdr,
12232424t hmac_desclean_upef">auth_hdr242;
1249        return <2426a>,
124ss=>242="sref">asocrAN_FRTX cla"sref">retval2427a>,
 * for /* ADDIP Sectp/s 4.1 ASCONF Cretu1Procedures name="L1196">1196
>242u* name="L1196">1196
242e" na="line" name="L1254">1="sref">u* When ineendpofnt1has aneASCONF signaled change to b hsent to thedeame="L1196">1196
243u"fas">116">1166< Eventually"sref">uL remote endpofnt1it should/do the following:deame="L1196">1196
2430;
 mis spaan clast"> * to yyyyyyyyy* ..l name="L1196">1196
2431"fas">116">1166< Eventuallyyyyyyyyy* A2) Ahserial /umber should/be aneigned to the Cretu.uTa hserial name="L1196">1196
 * for t"sref">u* /umber should/be a monotonically inc"easing /umber. Allhserial name="L1196">1196
243="n2thref="net/sctp/sm_makei"sref">uL /umbers are defined to be initialized at/1196
243class="line" name="L1254">1="sref">uL anet/sctp/s to the s"sr value as tae Initial TSNl name="L1196">1196
htons(243="sre="line" name="L1254">1="sref">u*" name="L1196">1196
htons(h>243"line" name=""_association1226        htonsauth_hdrhmac6ddip_serial226        ">ntohs(1226        htonsauth_hdrhmacief">auth_hdrhmacinitial_tssef">auth_hdr142" id="L1131" class="line" name="L1124+8a>,
active_ke24" c>2438" name="L125return>142" id="L1131" class="line" name="L1124+9a>,
((<>243 name="L1228">1228                ret244/a>,
1239        24"L1>244>" na"sref">hmac_desclean_upef">auth_hdr1228                ret2441a>,
auth24h_h>2441=sctp_chunk"">116">1166< Eventuall/* Releaseethe transport" f">scures.uL" name="L1196">1196
skb, >2442t hmac_deslist_for_each_safeef">auth_hdr =
htonsauth_hdr,
1226        htonsauth_hdrhmactransportsaddr_listef">auth_hdr  2      *
,
, 0, auth_hdr">ntohs(sctp_associationhtonsauth_hdr1196
,
hmac24c_l>2444t sp/sm_make_chunktransportef">auth_hdrhtonsntohs(   ACTIVEef">auth_hdr   ACTIVEdesc)L1196">1196
,
1224s=">244;
ntohs(auth_hdr1226        ,
auth_hdr1196
,
retval->re>244unk_hdr" clasname="L1249">1249        return <2447a>,
) + skb_tail_pointer<24"sr>244,
auth_hdr1228                ret2449a>,
2449t 245>" naname="L1249">1249        return <24h1a>,
re24=re>245 name="L1233">1233                ret2452a>,
245}
 * for /* Update 1196
1253<24" n>245="n2thref="net/sctp/sm_makei* name="L1196">1196
245class="line" name="L1254">1=* RFC2960 3.3.2.1 Optp/sal/Variable LengtheP2r"srters in INIT name="L1196">1196
1255245="sre="line" name="L1254">1=* name="L1196">1196
 * for t* 1196
updatel name="L1196">1196
1258245e" na="line" name="L1254">1=* cid tells us if INIT ACK or>COOKIE ECHO. name="L1196">1196

>246u"fas">116">1166< Eventually* If 1196
sctp_chunkify(s24ref>2460;
 mis spaan clast"> * to y* work we do.  In p2rticular, we should/not build/transportdeame="L1196">1196
2461"fas">116">1166< Eventually*" f">scures for>1196
 * for tL" name="L1196">1196
2464t auth_hdrsctp_associationauth_hdr1226        1196
 =

auth_hdr1196
r24e=r>246unk_hdr" class="sref"cccccodeeeeeeeconst1196
246"line" name="L1206">1lass=ntohs(auth_hdrauth_hdr1196
GFP_AT24MIC>246  2      *
,
2469t hmac6ddr"L1263" class="addr="L142" id="L1131" class="line" name="L11247/a>,
247>" name="L125fnt1p_associationauth_hdrhmacsat =
247ct size24n&q>2473t ntohs(auth_hdrhmacscopeef">auth_hdrchunk24" c>2474t ntohs(auth_hdrhmacstaleef">auth_hdr247;
sctp_associationskb_tail_pointer247unk_hdr" clasunp/s p_associationauth_hdrauth_hdrsctp_associationauth_hdr1249        return <24#9a>,
          >2479=sctp_chunk"">116">1166< Eventuall/* We mafntain ill/INIT p2r"srters in n1"work byte order ill/1196
116">1166< Eventually"sref">uL time.>uTais allows us to not worry about whe1196
 * to yyyyyyyyy* c"sr from>a fr1sh INIT,>ind INIT ACK, or>were  fored in a cookiel name="L1196">1196
  >2481"fas">116">1166< Eventuallyyyyyyyyy*" name="L1196">1196
sp/sm_make_chunkp2r"sef">auth_hdrhmacpef">auth_hdrhtonsauth_hdr  2      *
,
2484t ntohs(   PARAM_IPV6_ADDRESSef">auth_hdr   PARAM_IPV6_ADDRESSdesc:="L1228">1228                ret2485a>,
248;
s">ntohs(">ntohs(1226        htons        base/sm_lass="sref">hmacs/"L1263" class="s/ode=lass="sref">htons1196
248unk_hdr" class="sref"cccccodebreak42" id="L1131" class="line" name="L112487a>,
1goto "sref">hmac_desdosaddrsp2r"sef">auth_hdr2481249        return <2489a>,
 time a ne24" c>2489=sctp_chunk"case ">ntohs(   PARAM_IPV4_ADDRESSef">auth_hdr   PARAM_IPV4_ADDRESSdesc:="L1228">1228                ret249/a>,
249>" name="L1255">1255116">1166< Eventuall/* v4 addresses are not allowed on v6-only a hket *" name="L1196">1196
2491=sctp_chunk" class="f">sp/sm_make_chunkipv6_only_a hkef">auth_hdr1226        htons        base/sm_lass="sref">hmacs/"L1263" class="s/ode=))href="net/sctp/sm_make_chunk.c#L12512492a>,
249ct 12552493t hmac_desdosaddrsp2r"sef">auth_hdr1228                ret2494a>,
ntohs(        classgetsaf_specifi1/sm_make_chunk.c#L12p2r"s_type26f"L1263" class="p2r"s_type26f/sm_make_chunk.c#L12p2r"sef">auth_hdrhmacpef">auth_hdrhtonsauth_hdr1196
249;
htonsauth_hdr,
,
auth_hdrhmac6ddr"L1263" class="addr="L1ekc,
 =
1226        htonsauth_hdrhmacport =
1196
>249unk_hdr" class="sref"ass="sref">hmacscopeef">auth_hdr">ntohs(auth_hdr1196
249"line" name="L1206">1f">sp/sm_make_chunkclassinsscopeef">auth_hdr,
,
auth_hdr1" class=frag" id"L1m243">>249ikely" class="sref">uuuuuuuuuf">stp_associationauth_hdr1226        ,
,
auth_hdr,
auth_hdr   UNCONFIRMED/sm_))href="net/sctp/sm_make_chunk.c#L12512499a>,
11248" >249e" name="L1255">1255<<<<<<<<<<<<<<<<042" id="L1131" class="line" name="L1125,
d="L1168" claso3">1125250>" name="L1255">1255250 name="L1233">1233                ret25<2a>,
250ct ntohs(   PARAM_COOKIE_PRESERVATIVEef">auth_hdr   PARAM_COOKIE_PRESERVATIVEt 1228                ret25<3a>,
1255stp_associationauth_hdr1196
2504t 250class2" id="L1131" class="line" name="L1125<6a>,
        >250unk_hdr" class="sref"ass="sref">hmacstaleef">auth_hdr">ntohs(1266   sauth_hdrhmaclifeef">auth_hdrhtonsauth_hdr1196
250"line2" id="L1131" class="line" name="L1125<8a>,
1" class=frag" id"L1m25<">>250ikely" class="sref">uaass="comment"> * for /* Suggested Cookie Life ass="inc"entua's unit is msec, name="L1196">1196
1125<" >250e" na="line" name="L1254">1="sref">uuuuuuuuu* (1/1000sec)l name="L1196">1196
251u"fas">116">1166< Eventually"sref">uuuuuuuuu*" name="L1196">1196
retval, <25ass>2511=sctp_chunk" class="p/sm_make_chunk6">1226        htonsauth_hdrhmactv_secef">auth_hdr">ntohs(auth_hdr1196
hmac6">1226        htonsauth_hdrhmactv_usecef">auth_hdrsp/sm_make_chunkctaleef">auth_hdr1196
retval, 2513t 125525cod>2514t 1249        return <2515a>,
251;
ntohs(   PARAM_HOST_NAME_ADDRESSef">auth_hdr   PARAM_HOST_NAME_ADDRESSt 1228                ret2516a>,
251unk_hdr" class="sref"ass="sref">hmac">   DEBUG_PRINTKef">auth_hdr   DEBUG_PRINTK/sm_ma>116">1166< string">"unimple* foed ">   HOST_NAME_ADDRESS\n" name=");L1196">1196
re25=re>251"line" name="L1206">1break42" id="L1131" class="line" name="L112518a>,
2511249        return <2519a>,
ntohs(   PARAM_SUPPORTED_ADDRESS_TYPESef">auth_hdr   PARAM_SUPPORTED_ADDRESS_TYPESt 1228                ret252/a>,
25cod>252>" name="L1255">1255 * for /* Turn>off 1196
 * to yyyyyyyyyuuuuuuuu* ones are really set by 1196
2521"fas">116">1166< Eventuallyyyyyyyyyuuuuuuuu*" name="L1196">1196
2523t 1255

1226 htonsauth_hdrhmacipv4_addressef">auth_hdr0;L1196">1196 12232524t 1226 htonsauth_hdrhmacipv6_addressef">auth_hdr0;L1196">1196 252class2" id="L1131" class="line" name="L112526a>, 125ss=>252unk_hdr" class="sref"aass="comment"> * for /* Assume that peeo supports>1196 252"linelass="comment"> * for t"sref">uuuuuuuuu* by which1it sends a p2cketl name="L1196">1196 >252uuuuuuuuu*" name="L1196">1196 252e" name="L1255">1255sake_chunk.c#L12peeo_addr"L1263" class="peeo_addr="L1lass="sref">htonsauth_hdrhmacsa_familyref="+code=ntohca_familydesc ==>">ntohs(1196 253>" name="L1255">1255<="L125>up/sm_make_chunk6">1226 htonsauth_hdrhmacipv6_addressef">auth_hdr142" id="L1131" class="line" name="L112531a>, (sake_chunk.c#L12peeo_addr"L1263" class="peeo_addr="L1lass="sref">htonsauth_hdrhmacsa_familyref="+code=ntohca_familydesc ==>">ntohs(1196 253ct 1255hmac6">1226 htonsauth_hdrhmacipv4_addressef">auth_hdr142" id="L1131" class="line" name="L112533a>, 2534t 1166< Eventuall/* Cycle through address types; avoid divide by 0.uL" name="L1196">1196 253; ">ntohs( = auth_hdrhmacpef">auth_hdrhtonsauth_hdrauth_hdr1196 htons(253unk_hdr" class="sref"f">sp/sm_make_chunkcat = 1196 htons(h>253"line" name="L1206">1lass=1196 active_ke25" c>2531249 return <25+9a>, ((<>253e" name="L1255">1255sp/sm_make_chunkief">auth_hdr0;1p_associationauth_hdrauth_hdr 2 * , 1239 25"L1>254>" name="L1255">1255<="L125>uswitch>sp/sm_make_chunkp2r"sef">auth_hdrhmacsat = htonsauth_hdrauth_hdr 2 * , auth25h_h>2541=sctp_chunk" class="""""""""case ">ntohs( PARAM_IPV4_ADDRESSef">auth_hdr PARAM_IPV4_ADDRESSdesc:="L1228">1228 ret2542a>, skb, >254ct 12551226 htonsauth_hdrhmacipv4_addressef">auth_hdr142" id="L1131" class="line" name="L1125"3a>, , 0, , hmac25c_l>2544t 1249 return <25"5a>, 1225s=">254; ntohs( PARAM_IPV6_ADDRESSef">auth_hdr PARAM_IPV6_ADDRESSdesc:="L1228">1228 ret25"6a>, retval->re>254unk_hdr" class="sref"cccccodeeeeeee=s">ntohs(">ntohs(1226 htons base/sm_lass="sref">hmacs/"L1263" class="s/ode=lass="sref">htons1196 254"line" name="L1206">1lass=1226 htonsauth_hdrhmacipv6_addressef">auth_hdr142" id="L1131" class="line" name="L112548a>, skb_tail_pointer<25"sr>254ikely" class="sref">uuuuuuuuuuuuuuuuubreak42" id="L1131" class="line" name="L1125"9a>, 254 name="L1228">1228 ret255/a>, 255>" name="L1255">1255<="L125>ucase ">ntohs( PARAM_HOST_NAME_ADDRESSef">auth_hdr PARAM_HOST_NAME_ADDRESSt 1228 ret25h1a>, re25=re>2551=sctp_chunk" class="""""""""lass=1226 htonsauth_hdrhmachostref"_addressef">auth_hdr142" id="L1131" class="line" name="L112552a>, 255ct 12551253<25" n>2554t 116">1166< Eventuall/* Just ignore anything elsel>uL" name="L1196">1196 255; 1255255unk_hdr" class="sref"cccccodename="L1249">1249 return <25h7a>, 255"line" name="L1206">1name="L1249">1249 return <25h8a>, ubreak42" id="L1131" class="line" name="L1125h9a>, 1258255 name="L1228">1228 ret256/a>, ntohs( PARAM_STATE_COOKIEef">auth_hdr PARAM_STATE_COOKIEt 1228 ret2561a>, sctp_chunkify(s25ref>2561=sctp_chunk" class="p/sm_make_chunk6">1226 htonsauth_hdrhmac1ookie_lesef">auth_hdr1228 ret2562a>, 1255hmacs = auth_hdrhmacpef">auth_hdrhtonsauth_hdrauth_hdr1196 , 25/a>>2563t 1255

1226 htonsauth_hdrhmac1ookieef">auth_hdr">ntohs(auth_hdrhmac1ookieef">auth_hdrhtons1196 , 2564t r25e=r>256unk_hdr" clascase ">ntohs( PARAM_HEARTBEAT_INFOef">auth_hdr PARAM_HEARTBEAT_INFOt 1228 ret2567a>, 1">116">1166< Eventuall/* Would/be odd to receive, but1it causes no problems.uL" name="L1196">1196 GFP_AT25MIC>256ikely" class="sref">ubreak42" id="L1131" class="line" name="L112569a>, 256 name="L1228">1228 ret257/a>, 257>" name="L125case ">ntohs( PARAM_UNRECOGNIZED PARAMETERSef">auth_hdr PARAM_UNRECOGNIZED PARAMETERSt 1228 ret2571a>, 2571=sctp_chunk" class="p>116">1166< Eventuall/* Rejecoed during verify fage.uL" name="L1196">1196 257ct size25n&q>257pan c2" id="L1131" class="line" name="L112574a>, chunk25" c>2574t ntohs( PARAM_ECN_CAPABLEef">auth_hdr PARAM_ECN_CAPABLEt 1228 ret2575a>, 257; 1226 htonsauth_hdrhmacecn_capableef">auth_hdr142" id="L1131" class="line" name="L112576a>, skb_tail_pointer257unk_hdr" class="sref"break42" id="L1131" class="line" name="L112577a>, ->25ssc>257"line2" id="L1131" class="line" name="L112578a>, 25t s>2578t ntohs( PARAM_ADAPTATION_LAYER_INDef">auth_hdr PARAM_ADAPTATION_LAYER_INDt 1228 ret2579a>, >257e" name="L1255">12551226 htonsauth_hdrhmacadaptctp/s_ind"L1263" class="adaptctp/s_ind/sm_e=>">ntohs(1266 sauth_hdrhmacaind"L1263" class="aind/sm_lass="sref">htons1196 , >258>" name="L1255">12551233 ret2582a>, ntohs( PARAM_SET_PRIMARYef">auth_hdr PARAM_SET_PRIMARYt 1228 ret2583a>, 2583t 1255stp_associationauth_hdr1196 2584t hmac_desfall_throughef">auth_hdr1196 , 258class2" id="L1131" class="line" name="L112586a>, htonsauth_hdr">ntohs(auth_hdrhmacvef">auth_hdrauth_hdr1196 , 258ikely" class="sref">uasref">htonsntohs( classgetsaf_specifi1/sm_make_chunk.c#L12p2r"s_type26f"L1263" class="p2r"s_type26f/sm_make_chunk.c#L12p2r"sef">auth_hdrhmacpef">auth_hdrhtonsauth_hdr1196 , time a ne25" c>258e" name="L1255">1255htonsauth_hdr, , auth_hdr1196 1255<<<<<<<<<<<<<<<<<<<<hmachton> = 1226 htonsauth_hdrhmacport = 1196 259 name="L1233">1233 ret2592a>, 259ct 1166< Eventuall/* if>1196 259pan class="comment"> * for t"sref">uuuuuuuuu* XXX: see asecwhat to dol name="L1196">1196 259="n2thref="net/sctp/sm_makei"sref">uuuuuuuuu*" name="L1196">1196 259; stp_associationhtonsauth_hdr, , , >259unk_hdr" class="sref"""""""""break42" id="L1131" class="line" name="L112597a>, 259"line2" id="L1131" class="line" name="L112598a>, 1" class=frag" id"L1m253">>259ikely" class="sref">u"sref">htonsauth_hdr">ntohs(1226 , 1196 11258" >259e" name="L1255">1255stp_associationauth_hdr1126260>" name="L1255">1255<""""""""break42" id="L1131" class="line" name="L1126<1a>, 1233 ret26<2a>, 260ct hmacclassanet/ssetsprimaryref="+code=ntohclassanet/ssetsprimary/sm_mp/sm_make_chunk6">1226 auth_hdr2603t 12552604t 1249 return <26<5a>, ntohs( PARAM_SUPPORTED_EXTnk.c#L121hdr PARAM_SUPPORTED_EXTt 1228 ret26<6a>, >260unk_hdr" class="sref"ass="sref">hmacscassprocesssextsp2r"sef">auth_hdr1226 auth_hdr260"line" name="L1206">1break42" id="L1131" class="line" name="L1126<8a>, 1" class=frag" id"L1m26<">>2601249 return <26<9a>, 1126<" >2609=sctp_chunk"case ">ntohs( PARAM_FWD_TSN_SUPPORTnk.c#L121hdr PARAM_FWD_TSN_SUPPORTt 1228 ret261/a>, , 1255sp/sm_make_chunkclassprclassenableef">auth_hdr 2 * , retval, <26ass>2611=sctp_chunk" class="s="sref"ass="sref">hmac6">1226 htonsauth_hdrhmacprclasscapableef">auth_hdr142" id="L1131" class="line" name="L112612a>, 1break42" id="L1131" class="line" name="L112613a>, retval, 2613t 12551249 return <2614a>, 26cod>2614t 1166< Eventuall/* Fill/Through *" name="L1196">1196 hmac_desfall_throughef">auth_hdr1196 , 26hut 1196 , re26=re>261"line" name="case ">ntohs( PARAM_RANDOMnk.c#L121hdr PARAM_RANDOMt 1228 ret2618a>, 261ikely" class="sref">uf">stp_associationauth_hdr261e" name="L1255">1255<<<<<<<<hmac_desfall_throughef">auth_hdr1196 , 26cod>262>" naL1196">1196 , struct >2621=sctp_chunk" class="p>116">1166< Eventuall/* Save peeo's randomep2r"srter *" name="L1196">1196 262ct hmac6">1226 htonsauth_hdrhmacpeeo_randomef">auth_hdr">ntohs(auth_hdrauth_hdrhmacpef">auth_hdr1196 2623t 1255<<<<<<<<<<<<<<<<<<<<<<<<<<<<<">ntohs( = auth_hdrhmacpef">auth_hdrhtonsauth_hdr, auth_hdr12232624t stp_association1226 htonsauth_hdrhmacpeeo_randomef">auth_hdr 2 * , 262; hmacretval226 retvaldesce=>0;L1196">1196 126ss=>262unk_hdr" class="sref"""""""""break42" id="L1131" class="line" name="L112627a>, 1name="L1249">1249 return <2628a>, if (ubreak42" id="L1131" class="line" name="L112629a>, 262 name="L1228">1228 ret263/a>, 263>" name="L125case ">ntohs( PARAM_HMAC_ALGOef">auth_hdr PARAM_HMAC_ALGOt 1228 ret2631a>, (stp_associationauth_hdr263ct 1255hmac_desfall_throughef">auth_hdr1196 , 2634t 1166< Eventuall/* Save peeo's HMAC list *" name="L1196">1196 263; 1226 htonsauth_hdrhmacpeeo_hmac> = ntohs(auth_hdrauth_hdrhmacpef">auth_hdr1196 htons(263unk_hdr" class="sref"""""""""""""""""""""""""""""">ntohs( = auth_hdrhmacpef">auth_hdrhtonsauth_hdr, auth_hdrhtons(h>263"line" name="L1206">1f">stp_association1226 htonsauth_hdrhmacpeeo_hmac> = 2 * , active_ke26" c>263ikely" class="sref">uuuuuuuuuass="sref">hmacretval226 retvaldesce=>0;L1196">1196 (<>263e" name="L1255">1255<<<<<<<<1239 26"L1>264>" name="L1255">12551249 return <2641a>, auth26h_h>264 name="L1233">1233 ret2642a>, skb, >264ct 1166< Eventuall/* Set 1196 , , 0, auth_hdr1226 auth_hdrhmachmac_algo = , hmac26c_l>2644t , 1226s=">264class2" id="L1131" class="line" name="L1126"6a>, retval->re>264unk_hdr" clascase ">ntohs( PARAM_CHUNKSef">auth_hdr PARAM_CHUNKSt 1228 ret2647a>, ) + 1f">stp_associationauth_hdrskb_tail_pointer<26"sr>264ikely" class="sref">uuuuuuuuugoto "sref">hmac_desfall_throughef">auth_hdr1196 , 264 name="L1228">1228 ret265/a>, 265>" name="L1255">12551226 htonsauth_hdrhmacpeeo_ > = ntohs(auth_hdrauth_hdrhmacpef">auth_hdr1196 re26=re>2651=sctp_chunk" class="""""""""lass=1255 = auth_hdrhmacpef">auth_hdrhtonsauth_hdr, auth_hdr265ct stp_association1226 htonsauth_hdrhmacpeeo_ > = , 1255<<<<<<<<hmacretval226 retvaldesce=>0;L1196">1196 1253<26" n>2654t 265; hmac_desfall_throughef">auth_hdr1228 ret26h6a>, 1255265unk_hdr" clasdefault:="L1228">1228 ret26h7a>, 265"line" name="L1206">1aass="comment"> * for /* Any unrecognizedep2r"srters should/have been caught name="L1196">1196 uuuuuuuuu* and/handledeby classverifysp2r"s() which1should/be name="L1196">1196 1258265e" na="line" name="L1254">1="sref">uuuuuuuuu* calledeprior to this rout258. Simply log 1196 >266u"fas">116">1166< Eventually"sref">uuuuuuuuu* herel name="L1196">1196 sctp_chunkify(s26ref>2660; mis spaan clast"> * to yyyyyyyyyuuuuuuuu*" name="L1196">1196 266ct ntohs( DEBUG_PRINTKef">auth_hdr DEBUG_PRINTK/sm_ma>116">1166< string">"Ignoring p2r"s:e%danet/ictp/se%p.\n" name="mL1196">1196 1255<<<<<<<<<<<<<<<<<< = auth_hdrhmacpef">auth_hdrhtonsauth_hdr, 1226 2664t 1249 return <2666a>, r26e=r>266ut 1196 , hmacretval226 retvaldesc42" id="L1131" class="line" name="L112668a>, GFP_AT26MIC>266ikelyname="L1249">1249 return <2669a>, 266 name="L1228">1228 ret267/a>, 267u"fas">116">1166< Eventuall/* Select a new verificctp/setagl>uL" name="L1196">1196 hmac__uref="+code= __ureline"p_associationauth_hdrauth_hdrauth_hdr267ct 2 * , size26n&q>2673t 116">1166< Eventuall/* I/believe that this randomenumber generator>Eveplies with RFC1750l name="L1196">1196 chunk26" c>267="n2thref="net/sctp/sm_makei"sref">u* Aetag of 0 is reservedspecialscases (e.gl>INIT)l name="L1196">1196 267; u*" name="L1196">1196 skb_tail_pointer267unk_hdr" clasass="sref">hmac__uref="+code= __ureline"p_association 2 * , >267e" name="L1255">1255auth_hdr, 1196 , >268>" name="L125} while>sp/sm_make_chunkxf="+code= xdesce==>0);L1196">1196 1233 ret2682a>, ass="sref">hmacxf="+code= xdesc42" id="L1131" class="line" name="L112683a>, 2683t 1249 return <2684a>, 2684t 1249 return <2685a>, 268; uL" name="L1196">1196 268unk_hass="sref">hmac__uref="+code= __ureline"p_associationauth_hdrauth_hdrauth_hdr 2 * , 268ikely" class=ass="sref">hmac__uref="+code= __ureline"p_association retvaldesc42" id="L1131" class="line" name="L112689a>, time a ne26" c>268 name="L1228">1228 ret269/a>, 269>" name="L125p_associationauth_hdr, retvaldesc, sizeofsp/sm_make_chunk__uref="+code= __ureline));L1196">1196 , ass="sref">hmacretval226 retvaldesc42" id="L1131" class="line" name="L112692a>, 269ct 1249 return <26S3a>, 269="n2thref="net/sctp/sm_make/* name="L1196">1196 269; 1196 >269unk_hhref="net/sctp/sm_makei* 0<<<<<<<<<<<<<<<<<<<1<<<<<<<<<<<<<<<<<<<2<<<<<<<<<<<<<<<<<<<3 name="L1196">1196 269"linelass="comment"> * for t* 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1 name="L1196">1196 1" class=frag" id"L1m263">>2691196 11268" >269e" na="line" name="L1254">1=* | Typee=>0xC1 | eChsct Flags | eeeeeChsct Length<<<<<<<<<<<<<| name="L1196">1196 1127270u"fas">116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 2700; mis spaan clast"> * to y* | SerialsNumber | name="L1196">1196 2701"fas">116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 270pan class="comment"> * for t* | Address P2r"srter | name="L1196">1196 270="n2thref="net/sctp/sm_makei* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 270; 1196 >270unk_hhref="net/sctp/sm_makei* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 270"linelass="comment"> * for t* \ \ name="L1196">1196 1" class=frag" id"L1m27<">>2701196 1127<" >270e" na="line" name="L1254">1=* \ \ name="L1196">1196 271u"fas">116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 retval, <27ass>2710; mis spaan clast"> * to y* | ASCONF P2r"srter #N | name="L1196">1196 116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 retval, 271pan class="comment"> * for t* name="L1196">1196 27cod>271="n2thref="net/sctp/sm_makei* Address P2r"srter and/other p2r"srter will not/be wrapped in this functp/s name="L1196">1196 1196 27hut auth_hdrauth_hdrauth_hdr1226 1196 re27=re>271"line" name="L1206">1lass=1196 271ikely" class="sref">uuuuuuuuuuuuuuuuuuuuuuuuuuuuint p_associationauth_hdr271e" nas="liomment"> 2 * , 27cod>272>" name="L125p_associationauth_hdrauth_hdrauth_hdr retvaldesc42" id="L1131" class="line" name="L112722a>, auth_hdrauth_hdrauth_hdr2723t auth_hdrauth_hdr12232724t auth_hdr272; auth_hdrntohs( classgetsaf_specifi1/sm_make_chunk.c#L126ddr"L1263" class="addr="L1lass="sref">htonsauth_hdrhmacsin_familyref="+code=ntohcin_familyref=)42" id="L1131" class="line" name="L112726a>, 127ss=>272ut 1196 , auth_hdr">ntohs(htonsauth_hdr, auth_hdr>272ikely" class=f">stp_associationauth_hdr272e" name="L1255">1255ass="sref">hmacNULL"L1263" class="NULL="L142" id="L1131" class="line" name="L11273/a>, 273>" name="L125p_associationauth_hdr">ntohs(auth_hdr273 name="L1233">1233 ret2732a>, 273ct uL" name="L1196">1196 auth_hdr1226 CID_ASCONF226 "> CID_ASCONFref=ek0ekp_associationauth_hdr2734t stp_association retvaldesc)href="net/sctp/sm_make_chunk.c#L12512735a>, 273; hmacNULL"L1263" class="NULL="L142" id="L1131" class="line" name="L112736a>, htons(273ut 1196 , htons(h>273"line" name="p_associationauth_hdrhmacseriallf">auth_hdrp_associationauth_hdr1226 htonsauth_hdractive_ke27" c>2731249 return <27+9a>, ((<>273e" name="L125p_association retvaldesclass="sref">htonsauth_hdrhmacaddip_hdr"L1263" class="addip_hdrdesce=ame="L1249">1249 return <274/a>, 1239 27"L1>274>" name="L1255">1255auth_hdr retvaldesc, sizeofsp/sm_make_chunkasconflf">auth_hdr, auth_hdrauth27h_h>2741" name="L125p_association retvaldesclass="sref">htonshmacvef">auth_hdr1249 return <2742a>, skb, >274ct auth_hdr retvaldesc, ">ntohs(auth_hdr, auth_hdr, , 0, , hmac27c_l>2744t hmacretval226 retvaldesc42" id="L1131" class="line" name="L1127"5a>, 1227s=">274classname="L1249">1249 return <27"6a>, retval->re>274ut 1196 , ) + * for /* ADDIP name="L1196">1196 skb_tail_pointer<27"sr>2741196 274e" na="line" name="L1254">1=* 0<<<<<<<<<<<<<<<<<<<1<<<<<<<<<<<<<<<<<<<2<<<<<<<<<<<<<<<<<<<3 name="L1196">1196 275u"fas">116">1166< Eventually* 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1 name="L1196">1196 re27=re>2750; mis spaan clast"> * to y* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 2751"fas">116">1166< Eventually* | Typee=>0xC001<<<<<<<<<<| Length<= Variable<<<<<<<<<<| name="L1196">1196 * for t* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 1253<27" n>275="n2thref="net/sctp/sm_makei* | ASCONF-Request Correlctp/seID<<<<<<<<<<<<<<<<<<<| name="L1196">1196 275; 1196 1255275unk_hhref="net/sctp/sm_makei* | Address P2r"srter | name="L1196">1196 * for t* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 1196 1258275e" na="line" name="L1254">1=* 3.2.2 Delrte IP Address name="L1196">1196 >276u"fas">116">1166< Eventually* 0<<<<<<<<<<<<<<<<<<<1<<<<<<<<<<<<<<<<<<<2<<<<<<<<<<<<<<<<<<<3 name="L1196">1196 sctp_chunkify(s27ref>2760; mis spaan clast"> * to y* 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1 name="L1196">1196 2761"fas">116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 * for t* | Typee=>0xC002<<<<<<<<<<| Length<= Variable<<<<<<<<<<| name="L1196">1196 276="n2thref="net/sctp/sm_makei* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 1196 r27e=r>276unk_hhref="net/sctp/sm_makei* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 276"linelass="comment"> * for t* | Address P2r"srter | name="L1196">1196 GFP_AT27MIC>2761196 276e" na="line" name="L1254">1=* name="L1196">1196 277u"fas">116">1166< EventualluL" name="L1196">1196 auth_hdrauth_hdrauth_hdr1226 1196 277ct 1255<<<<<<<<<<<<<<<<<<<<<<1196 size27n&q>2773t 1255<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<auth_hdr1196 chunk27" c>2774t auth_hdr1196 277; skb_tail_pointer277unk_hs="liomment"> 2 * , ->27ssc>277"line" name="p_associationauth_hdrhtonsauth_hdr retvaldesc42" id="L1131" class="line" name="L112779a>, >277e" name="L125unp/sep_associationauth_hdrauth_hdrauth_hdr >278ct auth_hdrauth_hdrsizeofsp/sm_make_chunkp2r"sef">auth_hdr2784t auth_hdr0;L1196">1196 2785t auth_hdr0;L1196">1196 2786t auth_hdrauth_hdr0;L1196">1196 2781249 return <2789a>, time a ne27" c>278e" name="L125pass="comment"> * for /* Get 1196 auth_hdr">ntohs(auth_hdr1196 2791t auth_hdr0; p_associationauth_hdrauth_hdrauth_hdr 2 * , 279ct hmac6ddr"L1263" class="addr="L1e=>">ntohs(auth_hdr2793t ntohs( classgetsaf_specifi1/sm_make_chunk.c#L126ddr"L1263" class="addr="L1lass="sref">htonsauth_hdrhmacsin_familyref="+code=ntohcin_familyref=)42" id="L1131" class="line" name="L1127S4a>, auth_hdrp_associationhtonsauth_hdr, auth_hdr279class2" id="L1131" class="line" name="L112796a>, >279u auth_hdr">ntohs(auth_hdr279"line" name="L1206">1a_associationauth_hdr">ntohs(auth_hdr1" class=frag" id"L1m273">>2791249 return <2799a>, 11278" >279e" name="L1255">1255auth_hdr">ntohs(htonsauth_hdr1128280>" name="L1255">1255sp_association1226 htons auth_hdr 2 * , * for /* reuse 1196 280ct 1255auth_hdr">ntohs(auth_hdr2803t 1255<<<<<<<<hmactotallesef">auth_hdr">ntohs(auth_hdr2804t auth_hdr142" id="L1131" class="line" name="L1128<5a>, DEBUG_PRINTKef">auth_hdr DEBUG_PRINTK/sm_ma>116">1166< string">"mkasconf_update_ip: picked s"sr-acope del_pending addr, totallesall/addresses is %d\n" name="mhmactotallesef">auth_hdr>280u 1249 return <28<7a>, 280"line" name="name="L1249">1249 return <28<8a>, 1" class=frag" id"L1m28<">>2801249 return <28<9a>, 1128<" >280e" name="L125pass="comment"> * for /* Create s="asconf with 1196 281>" name="L125p_association retvaldesce=>p_associationauth_hdr1226 hmactotallesef">auth_hdrretval, <28ass>2811=sctp_chunk"f">stp_association retvaldesc)href="net/sctp/sm_make_chunk.c#L12512812a>, ass="sref">hmacNULL"L1263" class="NULL="L142" id="L1131" class="line" name="L112813a>, retval, 281pan c2" id="L1131" class="line" name="L112814a>, 28cod>2814" name="L125pass="comment"> * for /* Add 1196 auth_hdr">ntohs(auth_hdr1196 28hu auth_hdr0; p_associationauth_hdrauth_hdrauth_hdr 2 * , re28=re>281"line" name="L1206">1ass="sref">hmac6ddr"L1263" class="addr="L1e=>">ntohs(auth_hdr281ikely" class="sref">up_association">ntohs( classgetsaf_specifi1/sm_make_chunk.c#L126ddr"L1263" class="addr="L1lass="sref">htonsauth_hdrhmacsin_familyref="+code=ntohcin_familyref=)42" id="L1131" class="line" name="L112819a>, 1255auth_hdrp_associationhtonsauth_hdr, auth_hdr28cod>282>" name="L1255">1255auth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmactypeef">auth_hdrp_associationauth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmaclengthlf">auth_hdrhmachtonsnk.c#L121 htons/sm_make_chunk.c#L12p2r"slesef">auth_hdrauth_hdr282ct hmacp2r"sef">auth_hdrhmaccrr_idef">auth_hdrhmacief">auth_hdr282pan c2" id="L1131" class="line" name="L112824a>, 12232824t auth_hdr retvaldesc, ">ntohs(auth_hdr, auth_hdr282; auth_hdr retvaldesc, ">ntohs(auth_hdr, auth_hdr128ss=>282ut 1196 , 1ass="sref">hmac6ddr_buflf">auth_hdr">ntohs(htonsauth_hdr>282ikely" class=name="L1249">1249 return <2829a>, 282e" name="L125f">sp_associationp_association PARAM_ADD_IPef">auth_hdr PARAM_ADD_IPt auth_hdr 2 * , 283>" name="L1255">1255">ntohs(1226 htons 2831=sctp_chunk" class="p_association">ntohs( classgetsaf_specifi1/sm_make_chunk.c#L126ddr"L1263" class="addr="L1lass="sref">htonsauth_hdrhmacsin_familyref="+code=ntohcin_familyref=)42" id="L1131" class="line" name="L112832a>, 283ct hmac6ddr_p2r"s_lesef">auth_hdrp_associationhtonsauth_hdr, auth_hdrauth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmactypeef">auth_hdrp_association PARAM_DEL_IPef">auth_hdr PARAM_DEL_IPt 2834t auth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmaclengthlf">auth_hdrhmachtonsnk.c#L121 htons/sm_make_chunk.c#L12p2r"slesef">auth_hdrauth_hdr283; hmacp2r"sef">auth_hdrhmaccrr_idef">auth_hdrhmacief">auth_hdrhtons(283ut 1196 , htons(h>283"line" name="L1206">1ass="sref">hmacclassaddtost/sctlf">auth_hdr retvaldesc, ">ntohs(auth_hdr, auth_hdractive_ke28" c>283ikely" class="sref">up_associationauth_hdr retvaldesc, ">ntohs(auth_hdr, auth_hdr(<>283e" name="L125name="L1249">1249 return <284/a>, 1239 28"L1>284>" name="L125return>ass="sref">hmacretval226 retvaldesc42" id="L1131" class="line" name="L112841a>, auth28h_h>2841" naname="L1249">1249 return <2842a>, skb, >284ct 1249 return <2843a>, , 0, * for /* ADDIP name="L1196">1196 , hmac28c_l>284="n2thref="net/sctp/sm_makei* 3.2.4 Set Primary IP Address name="L1196">1196 , 1228s=">284; 1196 , retval->re>284unk_hhref="net/sctp/sm_makei* 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1 name="L1196">1196 284"linelass="comment"> * for i* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 skb_tail_pointer<28"sr>2841196 284e" na="line" name="L1254">1=* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 285u"fas">116">1166< Eventually* | ASCONF-Request Correlctp/seID<<<<<<<<<<<<<<<<<<<| name="L1196">1196 re28=re>2850; mis spaan clast"> * to y* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 2851"fas">116">1166< Eventually* | Address P2r"srter | name="L1196">1196 * for t* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 1253<28" n>285="n2thref="net/sctp/sm_makei* name="L1196">1196 285; 1196 1255285unk_hhref="net/sctp/sm_makei*" name="L1196">1196 auth_hdrauth_hdrauth_hdr1226 1196 uuuuuuuuuuuuuuuuuuuuuuuuuuuuccunp/sep_association1258285e" nas="liomment"> 2 * , auth_hdrhtonssctp_chunkify(s28ref>2861=sctp_chunk"struct p_associationauth_hdr retvaldesc42" id="L1131" class="line" name="L112862a>, hmaclenlf">auth_hdrauth_hdrauth_hdrhmac6ddrp2r"sef">auth_hdr2864t auth_hdrauth_hdrntohs( classgetsaf_specifi1/sm_make_chunk.c#L126ddr"L1263" class="addr="L1lass="sref">htonsauth_hdrhmacsin_familyref="+code=ntohcin_familyref=)42" id="L1131" class="line" name="L112866a>, r28e=r>286ut 1196 , auth_hdr">ntohs(htonsauth_hdr, auth_hdrGFP_AT28MIC>286ikely" class=f">stp_associationauth_hdr286e" name="L1255">1255ass="sref">hmacNULL"L1263" class="NULL="L142" id="L1131" class="line" name="L11287/a>, 287>" name="L125p_associationauth_hdr">ntohs(auth_hdr1233 ret2872a>, 287ct 1196 size28n&q>2873t auth_hdr1226 auth_hdrchunk28" c>2874t stp_association retvaldesc)href="net/sctp/sm_make_chunk.c#L12512875a>, 287; hmacNULL"L1263" class="NULL="L142" id="L1131" class="line" name="L112876a>, skb_tail_pointer287ut 1196 , ->28ssc>287"line" name="p_associationauth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmactypeef">auth_hdrp_association PARAM_SET_PRIMARYef">auth_hdr PARAM_SET_PRIMARY="L142" id="L1131" class="line" name="L112878a>, 28t s>2878t auth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmaclengthlf">auth_hdrhmachtonsnk.c#L121 htons/sm_make_chunk.c#L12lenlf">auth_hdrauth_hdrhmaccrr_idef">auth_hdr1196 1196 auth_hdr retvaldesc, sizeofsp/sm_make_chunkp2r"sef">auth_hdr, auth_hdr >288ct auth_hdr retvaldesc, ">ntohs(auth_hdr, auth_hdr2884t hmacretval226 retvaldesc42" id="L1131" class="line" name="L112885a>, 288classname="L1249">1249 return <2886a>, 1196 , * for /* ADDIP 3.1.2 Address Configurctp/seAcknowledge* fo C (ASCONF-ACK) name="L1196">1196 2881196 time a ne28" c>288e" na="line" name="L1254">1=* 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1<2<3 4 5 6 7 8 9 0<1 name="L1196">1196 116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 2890; mis spaan clast"> * to y* | Typee=>0x80 | C Flags | C Length<<<<<<<<<<<<<| name="L1196">1196 2891"fas">116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 289pan class="comment"> * for t* | Serial Number <<<<| name="L1196">1196 289="n2thref="net/sctp/sm_makei* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 289; 1196 >289unk_hhref="net/sctp/sm_makei* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 289"linelass="comment"> * for i* \ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\ name="L1196">1196 1" class=frag" id"L1m283">>2891196 11288" >289e" na="line" name="L1254">1=* \ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\ name="L1196">1196 1129290u"fas">116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 2900; mis spaan clast"> * to y* | ASCONF P2r"srter Response#N<<<<<<<<<<<<<<<<<<<| name="L1196">1196 2901"fas">116">1166< Eventually* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ name="L1196">1196 290pan class="comment"> * for t* name="L1196">1196 290="n2thref="net/sctp/sm_makei* Create s="ASCONF_ACK with enough refceefor>1196 290; 1196 >290u auth_hdrauth_hdrauth_hdr1226 1196 290"line" name="L1206">11111111111111111111111111111111p_associationauth_hdrhtonsauth_hdr, 1" class=frag" id"L1m29<">>290 2 * , 1129<" >290e" name="L125p_associationauth_hdrauth_hdr291>" name="L125struct p_associationauth_hdr retvaldesc42" id="L1131" class="line" name="L112911a>, retval, <29ass>2911=sctp_chunk"fnt ass="sref">hmaclengthlf">auth_hdrauth_hdrauth_hdr1249 return <2913a>, retval, 2913t 1196 29cod>2914" name="L125p_association retvaldesce=>p_associationauth_hdr1226 CID_ASCONF_ACKef">auth_hdr CID_ASCONF_ACKref=ek0ekp_associationauth_hdrstp_association retvaldesc)href="net/sctp/sm_make_chunk.c#L12512916a>, 29hu hmacNULL"L1263" class="NULL="L142" id="L1131" class="line" name="L112917a>, re29=re>291"line2" id="L1131" class="line" name="L112918a>, 2918t auth_hdrhmacserialef">auth_hdrhmachtonlef">auth_hdrauth_hdr291e" na2" id="L1131" class="line" name="L11292/a>, 29cod>292>" name="L125p_association retvaldesclass="sref">htonsauth_hdrhmacaddipshdr"L1263" class="addipshdrt auth_hdr retvaldesc, sizeofsp/sm_make_chunk6"conflf">auth_hdr, auth_hdr292ct 1249 return <2923a>, ass="sref">hmacretval226 retvaldesc42" id="L1131" class="line" name="L112924a>, 12232924t 1249 return <2925a>, 292class2" id="L1131" class="line" name="L112926a>, 129ss=>292unk_hhref="net/sctp/sm_make/* Add response p2r"srters to s="ASCONF_ACK .i*" name="L1196">1196 2927 auth_hdrauth_hdrauth_hdrauth_hdr1196 >292ikely" class="sref">uuuuuuuuuuuuuuup_associationauth_hdrauth_hdr, 292e" nas="liomment"> 2 * , 293>" name="L125p_associationauth_hdrhtonsauth_hdr2931" name="L125p_associationauth_hdrauth_hdr293ct hmaca"conf_p2r"s_lesef">auth_hdr1196 hmacerr_p2r"s_lesef">auth_hdr1196 2934" name="L125p_associationauth_hdr293class2" id="L1131" class="line" name="L112936a>, htons(2936t sp_association ERROR_NO ERRORef">auth_hdr ERROR_NO ERRORode= == ass="sref">hmacerr_ion 2 * , htons(h>293"line" name="L1206">1ass="sref">hmacresponse_typeef">auth_hdrp_association PARAM_SUCCESS_REPORTef">auth_hdr PARAM_SUCCESS_REPORTdesc42" id="L1131" class="line" name="L112938a>, active_ke29" c>293ikely" class=} else s="liomment"> 2 * , ((<>293e" name="L1255">1255auth_hdrp_association PARAM_ERR_CAUSEef">auth_hdr PARAM_ERR_CAUSEdesc42" id="L1131" class="line" name="L11294/a>, 1239 29"L1>294>" name="L1255">1255auth_hdrauth_hdrauth29h_h>2941=sctp_chunk" class="f">sp_associationauth_hdr, skb, >294ct 1255auth_hdr2943t 1255<<<<<<<<1255auth_hdrhtonshmaclengthlf">auth_hdrhmac29c_l>2944" name="L125name="L1249">1249 return <29"5a>, 1229s=">294class2" id="L1131" class="line" name="L1129"6a>, retval->re>2946t 1196 294"line" name="p_associationauth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmactypeef">auth_hdrp_associationauth_hdrskb_tail_pointer<29"sr>2948t auth_hdrhmacp2r"s_hdr"L1263" class="p2r"s_hdr/sm_lass="sref">hmaclengthlf">auth_hdrhmachtonsnk.c#L121 htons/sm_msizeofsp/sm_make_chunk6ck_p2r"sef">auth_hdr294e" name="L1255">1255<"+5">1255<<<<<<<<1255auth_hdr295>" name="L1255">1255<"+5">1255<<<<<<<<1255auth_hdrre29=re>2951" name="L125p_associationauth_hdrhmaccrr_idef">auth_hdrhmaccrr_idef">auth_hdr295ct auth_hdrauth_hdrauth_hdr, auth_hdr1253<29" n>2954t sp_association ERROR_NO ERRORef">auth_hdr ERROR_NO ERRORode= == ass="sref">hmacerr_ion295; 1255295ut 1196 , 2957t 1196 auth_hdrhmaccauself">auth_hdrhmacerr_ion1258295e" name="L125p_associationauth_hdrhmaclengthlf">auth_hdrhmachtonsnk.c#L121 htons/sm_make_chunk.c#L12err_p2r"s_lesef">auth_hdrauth_hdr >296>" name="L125p_associationauth_hdrauth_hdrauth_hdr, auth_hdrsctp_chunkify(s29ref>296 name="L1233">1233 ret2962a>, 1196 sp_associationauth_hdr, 2964t auth_hdrauth_hdrauth_hdrauth_hdr1249 return <2966a>, r29e=r>296ut 1196 , * for /* Process a"asconf p2r"srter.i*" name="L1196">1196 GFP_AT29MIC>296ikelystctpc"p_associationauth_hdrauth_hdr1226 1196 296e" name="L1255">1255<<<<<<<<<<<<<<<<<<<<<<<auth_hdrauth_hdr1196 297>" name="L1255">1255<"+5">1255<<<<<<<<1p_associationauth_hdrauth_hdr, 297 names="liomment"> 2 * , 297ct auth_hdrsize29n&q>2973t auth_hdrchunk29" c>2974t 297; auth_hdrauth_hdrskb_tail_pointer297ut 1196 , ->29ssc>297"line" name="p_associationauth_hdrauth_hdrauth_hdrsp_associationauth_hdrhtonshmactypeef">auth_hdrp_association PARAM_ADD_IPef">auth_hdr PARAM_ADD_IPt 1p_associationauth_hdrhtonshmactypeef">auth_hdrp_association PARAM_DEL_IPef">auth_hdr PARAM_DEL_IPt auth_hdrhtonshmactypeef">auth_hdrp_association PARAM_SET_PRIMARYef">auth_hdr PARAM_SET_PRIMARY="L1)href="net/sctp/sm_make_chunk.c#L12512982a>, ass="sref">hmac"> ERROR_UNKNOWN PARAMef">auth_hdr ERROR_UNKNOWN PARAMt 2984t auth_hdrhtonshmactypeef">auth_hdr 2 * , 298; PARAM_IPV6_ADDRESSef">auth_hdr PARAM_IPV6_ADDRESS 2 * , stp_association1226 htonshmacipv6_address"L1263" class="ipv6_address="L1)href="net/sctp/sm_make_chunk.c#L12512987a>, 111111111return>ass="sref">hmac"> ERROR_DNS_FAILEDef">auth_hdr ERROR_DNS_FAILEDt 298ikely" class="sref">ubreak42" id="L1131" class="line" name="L112989a>, time a ne29" c>2989 PARAM_IPV4_ADDRESSef">auth_hdr PARAM_IPV4_ADDRESS 2 * , 299>" name="L1255">1255stp_association1226 htonshmacipv4_address"L1263" class="ipv4_address="L1)href="net/sctp/sm_make_chunk.c#L12512991a>, hmac"> ERROR_DNS_FAILEDef">auth_hdr ERROR_DNS_FAILEDt 299ct 2993t 2 * , ass="sref">hmac"> ERROR_DNS_FAILEDef">auth_hdr ERROR_DNS_FAILEDt 299; 1249 return <2996a>, >299ut 1196 , 299"line" name="p_association">ntohs( classgetsaf_specifi1/sm_make_chunk.c#L12p2r"sstype26f"L1263" class="p2r"sstype26f/sm_make_chunk.c#L126ddrsp2r"sef">auth_hdrhtonshmactypeef">auth_hdr1" class=frag" id"L1m293">>299ikely" class=f">sass="sref">hmacunlikelyref="+code=ntohunlikely/sm_mtp_association, 11298" >299e" name="L1255">1255ass="sref">hmac"> ERROR_DNS_FAILEDef">auth_hdr ERROR_DNS_FAILEDt 113030

d="L116do cla,
" id="L1131" class="line" name="L1130<1a>,
htonsauth_hdr,
ntohs(auth_hdrntohs(1226        htonshmacportef">auth_hdr301249        return <30<3a>,
1196
30<="n2thref="net/sctp/sm_makeiiiiiiiii*eor multicast address. name="L1196">1196
30<;
1196
>30we   eckefor>1196
30<"linelass="comment"> * for iiiiiiiii*" name="L1196">1196
1" class=frag" id"L1m30<">>30stp_associationhtons,
htonsauth_hdr,
ntohs(auth_hdrhtons        ckbt ,
1130<" >301255ass="sref">hmac">   ERROR_DNS_FAILEDef">auth_hdr   ERROR_DNS_FAILEDt 30e_t 1249        return <3011a>,
retval, <30ass>30e1=sctp_chunk"switch>sp_associationauth_hdrhtonshmactypeef">auth_hdr  2      *
,
p_association   PARAM_ADD_IPef">auth_hdr   PARAM_ADD_IPt   2      *
,
retval, 30e3t 12551196
30cod>30e="n2thref="net/sctp/sm_makeiiiiiiiiiiiiiiiii*eIf 1196
1196
30eunk_hhref="net/sctp/sm_makeiiiiiiiiiiiiiiiii*" name="L1196">1196
re30=re>30e"line" name="L1206">1f">sp_associationhtons,
30eikely" class="sref">uuuuuuuuuc,
,
,
auth_hdrhtons        cource nneeksizeofsp/sm_make_chunk6ddr"L1263" class="addr="L1))42" id="L1131" class="line" name="L113019a>,
30cod>30cot 12551196
 * to yiiiiiiiiiiiiiiii*erequest and/does not have 1196
30c1"fas">116">1166< Eventuallyiiiiiiiiiiiiiiii*eneweaddress to 16"Error="ame="L1196">1196
30cpan class="comment"> * for tiiiiiiiiiiiiiiii*eCause TLV set to 1196
122330c="n2thref="net/sctp/sm_makeiiiiiiiiiiiiiiiii*eDue to Resource Shortage'. name="L1196">1196
30c;
1196
130ss=>30cut 1196
,
1ass="sref">hmacpeer"L1263" class="peerlinee=>">ntohs(1226        ,
ntohs(ntohs(   UNCONFIRMEDef">auth_hdr   UNCONFIRMEDline)42" id="L1131" class="line" name="L1130c8a>,
        if (uf">stp_association,
30ce" name="L1255">1255<<<<<<<<ass="sref">hmac">   ERROR_RSRC_LOWef">auth_hdr   ERROR_RSRC_LOWt 30+ct 1196
,
(1196
30+ct stp_association,
htonsntohs(auth_hdr,
1255<<<<<<<<<">ntohs(auth_hdr30+4t 1226        htonsauth_hdr">ntohs(30+;
htons(30+u
   PARAM_DEL_IPef">auth_hdr   PARAM_DEL_IPt   2      *
,
htons(h>30+"line" name="L1206">1aref="net/sctp/sm_make/* ADDIP 4.3 D7)eIf ferequest is received to delete 1196
active_ke30" c>30+1196
(<>30+e" na="line" name="L1254">1=iiiiiiiiiiiiiiii* MUST send>16"ErroreCause TLV with 1196
1239        30"L1>30"L"fas">116">1166< Eventuallyiiiiiiiiiiiiiiii*eneweerror chun 'Request to Delete Last Remaingag IP Address'. name="L1196">1196
auth30h_h>30"0;
 mis spaan clast"> * to yiiiiiiiiiiiiiiii*" name="L1196">1196
skb, >30"ct sake_chunk.c#L126">1226        htonshmactransport_countef">auth_hdr30"3t 1255<<<<<<<<ass="sref">hmac">   ERROR_DEL_LAST_IPef">auth_hdr   ERROR_DEL_LAST_IPline42" id="L1131" class="line" name="L113044a>,
hmac30c_l>30"4t 1196
,
1230s=">30";
1196
1196
30""linelass="comment"> * for iiiiiiiiiiiiiiiii* which contained 1196
skb_tail_pointer<30"sr>30"1196
30"e" na="line" name="L1254">1=iiiiiiiiiiiiiiii* 16"ErroreCause TLV set to 1196
30hu"n2thref="net/sctp/sm_makeiiiiiiiiiiiiiiiii*eDelete SourceeIP Address'liame="L1196">1196
re30=re>30h0;
 mis spaan clast"> * to yiiiiiiiiiiiiiiii*" name="L1196">1196
30hct sake_chunk.c#L12classtmssaddrsexactef">auth_hdr,
auth_hdrhtons        cource nneek&c,
1255<<<<<<<<ass="sref">hmac">   ERROR_DEL_SRC_IPef">auth_hdr   ERROR_DEL_SRC_IPline42" id="L1131" class="line" name="L113054a>,
1253<30" n>30h4t 1196
,
30h;
1196
125530hunk_hhref="net/sctp/sm_makeiiiiiiiiiiiiiiiii* If 1196
 * for iiiiiiiiiiiiiiiii* addresses of>1196
1196
125830he" na="line" name="L1254">1=iiiiiiiiiiiiiiii*" name="L1196">1196

>30n>line" name="L1206">1f">sp_associationhtons,
  2      *
,
sctp_chunkify(s30ref>30n1=sctp_chunk" class="11111111">ntohs(1226        ,
auth_hdrhtonsauth_hdr30nct 12551226        1255<<<<<<<<12551255auth_hdrhtonsauth_hdr30n4t 12551226        ,
r30e=r>30nu
30n"line" name="case>p_association   PARAM_SET_PRIMARYef">auth_hdr   PARAM_SET_PRIMARY="L1:="liomment">  2      *
,
GFP_AT30MIC>30nikely" class="sref">uaref="net/sctp/sm_make/* ADDIP Sectp/se4.2.4 name="L1196">1196
30ne" na="line" name="L1254">1=iiiiiiiiiiiiiiii* If 1196
30#L" na="line" name="L1254">1=iiiiiiiiiiiiiiii* MAY mark 1196
 * to yiiiiiiiiiiiiiiii*eprimary. name="L1196">1196
30#1"fas">116">1166< Eventuallyiiiiiiiiiiiiiiii*" name="L1196">1196
size30n&q>30#3t 1255sp_associationhtons,
1196
chunk30" c>30#4t ua,
,
hmacv4"L1263" class="v4="L1, ">ntohs(        classcource/sm_make_chunk.c#L126"conflf">auth_hdr30#class2" id="L1131" class="line" name="L1130#6a>,
skb_tail_pointer30#u
hmacpeer"L1263" class="peerlinee=>">ntohs(1226        ,
1f">stp_association,
     30t s>30#ikely" class="sref">uuuuuuuuureturn>ass="sref">hmac">   ERROR_DNS_FAILEDef">auth_hdr   ERROR_DNS_FAILEDt hmacclassanet/sset_primaryref="+code=ntohclassanet/sset_primary/sm_make_chunk.c#L126">1226        ,
  >30>ct 1249        return <30>3a>,
30>pan c2" id="L1131" class="line" name="L1130>4a>,
30>4t hmac">   ERROR_NO ERRORef">auth_hdr   ERROR_NO ERRORode=42" id="L1131" class="line" name="L113085a>,
30>classname="L1249">1249        return <30>6a>,
1196
,
 * for /* Verify we process it.ii*" name="L1196">1196
30>ikelyint ass="sref">hmacclassverify_6"conflf">auth_hdrauth_hdr1226        1196
 time a ne30" c>30>e" name="L1255">1255<<<<<<<auth_hdr1196
1255<<<<<<<  2      *
,
auth_hdrauth_hdr30Sct 30S3t auth_hdr,
auth_hdr30S4t 1196
,
hmacv"L1263" class="vlinee=>sake_chunk.c#L12classp2r"shdrstef">auth_hdr>30Su
hmacv"L1263" class="vlinee<= ass="sref">hmacc/sct_endef">auth_hdrauth_hdr  2      *
,
30S"line" name="L1206">1ass="sref">hmaclengthlf">auth_hdrhmacntohsnk.c#L121      ntohs/sm_mp_associationhmacp"L1263" class="p/sm_lass="sref">htonsauth_hdr1" class=frag" id"L1m303">>30Sikely" class="sref">u*p_associationntohs(hmacp"L1263" class="p/sm_42" id="L1131" class="line" name="L1130S9a>,
11308" >30Se" na2" id="L1131" class="line" name="L1131,
d="L1168" claso3">1131310>line" name="L1206">1f">sp_associationhmacv"L1263" class="vlinee&ss= ass="sref">hmacc/sct_endef">auth_hdrhmaclengthlf">auth_hdr3101=sctp_chunk" class="1111ass="sref">hmaclengthlf">auth_hdrauth_hdr310ct 1255042" id="L1131" class="line" name="L1131<3a>,
3104t hmacp"L1263" class="p/sm_lass="sref">htonsauth_hdr  2      *
,
p_association   PARAM_ADD_IPef">auth_hdr   PARAM_ADD_IPt   2      *
,
        >310u
   PARAM_DEL_IPef">auth_hdr   PARAM_DEL_IPt   2      *
,
310"line" name="L1206">1case>p_association   PARAM_SET_PRIMARYef">auth_hdr   PARAM_SET_PRIMARY="L1:="liomment">  2      *
,
1" class=frag" id"L1m31<">>310ikely" class="sref">uuuuuuuuuc,
auth_hdrsake_chunk.c#L12classaddipsp2r"sstef">auth_hdrhmacv"L1263" class="vline42" id="L1131" class="line" name="L1131<9a>,
1131<" >311255,
auth_hdrhmacntohsnk.c#L121      ntohs/sm_mp_associationauth_hdrhtonshmaclengthlf">auth_hdr311>" name="L1255">1255<"+5">125f">sp_associationauth_hdrauth_hdrretval, <31ass>3111=sctp_chunk" class="111111111111sizeofsp/sm_make_chunkclassp2r"shdrstef">auth_hdr1255<<<<<<<<042" id="L1131" class="line" name="L1131e3a>,
retval, 31e3t 1255<<<<<<<<31cod>3114t    PARAM_SUCCESS_REPORTef">auth_hdr   PARAM_SUCCESS_REPORT="L1:="liomment">  2      *
,
311;
   PARAM_ADAPTATION_LAYER_INDef">auth_hdr   PARAM_ADAPTATION_LAYER_IND="L1:="liomment">  2      *
,
311u
125f">sp_associationauth_hdrauth_hdrre31=re>31e"line" name="L1206">15">1255<<<<<<<<042" id="L1131" class="line" name="L1131e8a>,
3118t 311e" name="L1255">125531cod>31cot 1255  2      *
,
        struct >3121=sctp_chunk" class="11111111break42" id="L1131" class="line" name="L113122a>,
1249        return <3123a>,
12233124t hmacv"L1263" class="vlinee+= ass="sref">hmacWORD_ROUNDef">auth_hdrauth_hdr312;
1249        return <3126a>,
131ss=>31cut 1196
,
sp_associationhmacv"L1263" class="vlinee!=>p_associationauth_hdr>31cikely" class="sref">ureturn>042" id="L1131" class="line" name="L113129a>,
312e" na2" id="L1131" class="line" name="L11313/a>,
313ot 31+1=sctname="L1249">1249        return <31+2a>,
313ct 1249        return <3133a>,
 * for /* Process an in"> gag ASCONF       with 1196
313="n2thref="net/sctp/sm_makei* return>16"ASCONF_ACK       to be s_ma in response. name="L1196">1196
313;
1196
htons(31+u
auth_hdrauth_hdrauth_hdr1226        1196
htons(h>31+"line" name="L1206">111111111111111111111111struct p_associationauth_hdrauth_hdractive_ke31" c>31+  2      *
,
((<>313e" name="L125p/sm_make_chunkclassaddiphdrstef">auth_hdr1239        31"L1>314ot auth_hdrauth_hdrauth31h_h>3141" name="L125p_associationauth_hdrauth_hdrskb, >31"ct auth_hdrauth_hdr314pan c2" id="L1131" class="line" name="L113144a>,
hmac31c_l>3144" name="L125p_association,
1231s=">31";
auth_hdrauth_hdr314"line" name="p_associationauth_hdrskb_tail_pointer<31"sr>3148
314e" na2" id="L1131" class="line" name="L11315/a>,
3150line" name="p_associationauth_hdrhmacntohsnk.c#L121      ntohs/sm_mp_associationauth_hdrhtonshtonsauth_hdrauth_hdrre31=re>3151" name="L125p_associationauth_hdrauth_hdrhtons        ckbt htons        datadesc42" id="L1131" class="line" name="L113152a>,
31hct auth_hdrhmacntohllf">auth_hdrhtonsauth_hdr1253<31" n>3154" name="L125pref="net/sctp/sm_make/* Skip a pointer to sddress p2r"srter.ii*" name="L1196">1196
3155" name="L125p_associationauth_hdrauth_hdr12553156" name="L125p_associationauth_hdrsunp/sep_associationauth_hdrauth_hdrhtons        ckbt htons        datadesc +5p_associationauth_hdrauth_hdrhmaclengthlf">auth_hdr12583159" name="L125pref="net/sctp/sm_make/* Skip a pointer to 1196

>316L" na="line" name="L1254">1=iiiiiiii* asconf p2r"srter. name="L1196">1196
sctp_chunkify(s31ref>3160;
 mis spaan clast"> * to yiiiiiiii*" name="L1196">1196
316ct auth_hdrhmacntohsnk.c#L121      ntohs/sm_mp_associationauth_hdrhtonshmaclengthlf">auth_hdrauth_hdrsvoid<*)p_associationauth_hdrauth_hdr3164" name="L125p_associationauth_hdrhmaclengthlf">auth_hdrr31e=r>31nu
1196
316"linelass="comment"> * for iiiiiiiii* Based /sep2r"srters,>we know>1196
GFP_AT31MIC>316less thf="or equal to ASCONF name="L1196">1196
31ne" na="line" name="L1254">1=iiiiiiii* p2r"srters. name="L1196">1196
31#L" na="line" name="L1254">1=iiiiiiii*" name="L1196">1196
auth_hdr">ntohs(auth_hdr1226        ,
auth_hdr,
auth_hdr317ct stp_associationauth_hdrsize31n&q>31#3t 1255htonschunk31" c>3174t 1196
,
3175
1196
skb_tail_pointer317u
auth_hdr  2      *
,
->31ssc>31#"line" name="L1206">1p_associationntohs(auth_hdr1226        ,
auth_hdr1196
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuup_associationauth_hdr12551196
1=iiiiiiiiiiiiiiii* If f="error response is received for a TLV p2r"srter, name="L1196">1196
 * to yiiiiiiiiiiiiiiii*eall TLVs with no response before>1196
  >3181"fas">116">1166< Eventuallyiiiiiiiiiiiiiiii*econsidered successful+f">not reported.  All TLVs after="ame="L1196">1196
 * for tiiiiiiiiiiiiiiii*econsidered unsuccessful+unless="ame="L1196">1196
318="n2thref="net/sctp/sm_makeiiiiiiiiiiiiiiiii*ea specific success indicctp/seis pres_ma for 1196
318;
1196
318u
sp_association   ERROR_NO ERRORef">auth_hdr   ERROR_NO ERRORode=e!=>p_association111111111p_association3188t  time a ne31" c>31>e" name="L1255">1255stp_association,
31SN" name="L1255">1255<<<<<<<auth_hdrauth_hdr1196
3191=sctp_chunk" class="111111111111ame="L1206">111111111p_associationauth_hdrhtonsauth_hdr,
1196
319ct 1255<<<<<<<<<"L1206">111111111p_associationauth_hdr319pan c2" id="L1131" class="line" name="L113194a>,
16"endpoint receivgag f="ASCONF to sdd name="L1196">1196
319;
Resource' in its response, it name="L1196">1196
>319unk_hhref="net/sctp/sm_makeiiiiiiiiiiiiiiiii* MUST also fail any subsequent add"or delete requests bundled name="L1196">1196
319"linelass="comment"> * for iiiiiiiiiiiiiiiii* in 1196
1" class=frag" id"L1m313">>31331net/sctp/sm31b=>sake_cAclassa 31        size31n&q>31#3t 1255htons<2hlf">auth_2dr1255htons<2h2f">auth_2dss="err_ion21131"2class="line" name="L113194a>,
1255042" id="21131"20lass="line" name="L11/sctp/sm3162a>,
auth_hdrhmacntohsnk.c#L121      ntohs/sm_mp_associationauth_hdrhtonshmaclen2ct29sm_mak2_chu31310pan c2" id="21131"2class="line" name="L11ame="L113163a>,
                     31/a>>31n3t                      31/a>>31n3t svoid<*)p_associationauth_hdraut2_hdr 22      *
3164" name="L125p_associationauth_hdrhmacle2_hdr 2 PARAM_ADD_IPt  22      * 2 PARAM_DEL_IPt  22     line" name="L113131a>,
 2 ae ASCONF. name="L1196">2nt"> 22     >,
size31n&q>31#3
31cod>312f">hmacv"L2263" class="vline42" id="21131"20      *
,, >30"ct sake_chunk.c#L126">1226        hmacle2thlf">auth2hdrhmacle2tlf">auth_2dipsp2r"sstline) +2" id="21131"2class="line" n3194a>,
=socpine"  class="srehiiii>30"ference" nai3="n2asf">>3/sm_make/* Process 1=ference" naiiii> href=a"clas a>>1"+c>319"linelass="comment"> * for iiiiiiiiii2=soc5">1252<<<<<<<<042" id="21131"21
2255<<<<<<<<,
skb317ct sake_chunk.c#L12c/sct_lesef">auth2>   PARAM_2UCCESS_REPORT="L1:="liomm2nt"> 22      *
auth_iii" name="L1255">1255<">auth_iiionauth_hdrhmaclen2RAM_ADAPTA2ION_LAYER_IND="L1:="liomm2nt"> 22      *
auth_hdr1255auth_hdr,
>30"ct auth_hdrhmaclen2R8dr 2<<<<<<<<042" id="21131"218     *3118t 2255auth_hdrhmaclen2ot 1255 22lass="line" name="L113131a>,
        return <31+2a>,
1229        return <3133a>,
 * fis+c31>  >318ly=a"c66< sctp/sm_make/* Process 312pan c2" id="21131"2class=staticp2r"sh>31n_c31>  >" name="L1255">1255<<  31/a>>31n_c31>  >onauth_hdrauth_hdrauth2hdr30S1" name="L125p_associationauth_hdr312;
1249hile>sake_chunk.c#L12c/sct_lesef">auth2 name="L1225">131ss=>31cut 2196
auth_hdrsize30n&qlass="p2r"s_hdr/sm_lass="sref">hmaclen2o8dr 2r30S1"="srefassociationauth_hdrhmaclen2o" name="L2="sref">ureturn>042" id="21131"229>30Sunk.c#L12classtmssaddra>, >30"ct baSN1226        hmaclen2 id="L12282 cla31.c#>312e" na2" id="21131"23lass="line" name="L11314/a>,
1239        31"L1>314ot auth_hdr313ot 2a href="+return>142" id="21131"231auth_hdr31+1=sctname="L1249">123lass="line" name="L113142a>,
skbf">kr  >30> 
krhmaclen2   >312ct 2 cla31ref>313ct 123lass="line" name="L113193a>,
2196,
12553156" nef="+p_association                     31/a>>31n3t 125f">sp_associationauth_hdrhmaclen2 hlf">auth2n response. name="L1196">2196,
     2f="net/sct2/sm_makei*" name="L1196">2196,
1che"c again< sctp/sm_make/* Process 1226        2196,a59" clasref">size30n&qe" name="L1206">1p_assoget<auth_hdrsizhmacntohsnk.c#L121      ntohs/sm_mp_associationauth_hdrhmacp"mlass="p2r"s_hdr/sm_lass="sref">hmaclen2 8dr 2_hdrsize30n&q   ntohs/sm_mp_assocfrom39">1239        31"L1>from39">1239auth_hdrhmacntohsnk.c#L121   process_a"confsp2hton>" name="L1255">hton>on>   ntohs/sm_mp_associociationhmaclen2 " name="L2_ke31" c>31+ 23lass="line" name="L113149a>,
,
hmacntohsnk.c#L121      ntohs/sm_mp_associationauth_hdrhmacp"L1263" class="p/sm_lass="sref">htonsauth_hd2,
p_association   PARAM_ADD_IPef">aut2>auth_hdr<2aa"conf_p2r"sdesc42" id="21131"24lass="line" name="L113194a>,
="n2BHtran3extlass31a f">k"L1lo"con/sm_make/* Process auth_hd21changnet/sctp/sm_makei* return>16"ASCONF_ACK       20, 314pan c2" id="21131"24

hmaclen2f">auth_hd2
>   ntohs/sm_mp_assocdss="s3_fist">auth_hdrauth_hdrhtons1226,
3042a>,
skb1255<"mot auth_hdrauth_hdr1226aut2_hdr1tatN0n&qe" name="L1206">1pref="ss=R_SRC31<  >310;
hmaclen2lass="alls22r"sspassode= = 142" id="21131"24,
314e" na2" id="21131"25lass="line" name="L11308/a>,
 lo"al_bh_enablr"sdesclass="srelo"al_bh_enablronhmaclen2h_hdr  >30> 
auth_hdr, >30"ct sake_chunk.c#L126">1226        auth_hdt auth_hdr        datadesc42" id="21131"25
auth_hd>" name="L1255">">auth_hd>onfscL1263" class="p/sm_lass="sref">htonsauth2hdr5stauth_hdrauth_hdrauth_hdrhmaclen2ne" name="2125131cla>315pan c2" id="21131"25lass="line" name="L11        auth_hdationauth_hdrauth_hdrauth_hdr1pNULL">auth_hdrhmaclen2sddress p22"srter.ii*" name="L1196">2196
auth_hd2ssaddiphdrstline)42" id="21131"25      *
        struct >3121=sct2thlf">auth2hdr,
        >310u
   PARAM_DEL_IPef">aut2gthlf">aut2_hdrhmaclen2.c#L1257" 2d="L31ake>3158t skb1255>ssanet/slookupsp2ddr/sm_make_chunk.c#L126">1226hmaclen2a pointer 2o 2196,
d=dra>, >30"ct auth_hdr=soass="ciation   ERRONULL">auth_hdrhmaclen2a_hdr2196,
auth_hdr,
d=dra>, >30"ct auth_hdr=soass=ssanet/slookupsp2ddr/sm_make_chunk.c#L126">1226htons * to2yiiiiiiii*" name="L1196">2196,
slookupsp2ddr/skfreeke_chunk.c#L126kfreeon,
d=dra>, >30"ct auth_hdr=soass=alass="p2r"s_hdr/sm_lass="sref">hmaclen2allf">auth2hdr>30"ct auth_hdr=soass="" name="L1206">1pNULL">auth_hdrhmaclen2gthlf">aut2_hdraut2_hdr
hmaclen2  struct <2 hre31/a>>316class2" id="21131"26      *
auth_hdr, >30"ct sake_chunk.c#L126">1226        auth_hdt auth_hdr2196,
h/a>        auth_hd>" name="L1255">">auth_hd>onfscL1263" class="p/sm_lass="sref">htons2196
,
1" clas5st5stauth_hdrauth_hdrauth_hdrhmaclen2ASCONF name="L1196">2196,
auth_hdationauth_hdrauth_hdrauth_hdr1pNULL">auth_hdrhmaclen2=iiiiiiii*2p2r"srters. name="L1196">2196,
2=iiiiiiii*" name="L1196">2196        struct >3121=sct2uth_hdr,
31cod>312f">auth_hd2aut2" class="donaut231" c>3174t 2196
2196        return <3126a>,
 27
1 fromme="L2195"3f">r31e=r>tp/sm_make/* Process aut2_hdr2196,*/sm_makeigiv>319 href="net/sctp/ cIf"aker18L"  3180;
 msm_makis254">1=iiiiiiiiiiiiiiii* If f="error response is receiv2auth_hdr,
1 bcode=sctp_chakird argu3169
16"ASCONF_ACK       2m_make/* A2DIP 4.1 A7) name="L1196">2196
2 p2r"srter, name="L1196">2196
1=iiiiproglineclass31 16"ASCONF_ACK       2mth_hdr2196
 * to yii h116">116616"ASCONF_ACK       2m">auth_hd2 TLVs after="ame="L1196">2196
 * for tiiiii at/sctp/sm_makei* return>16"ASCONF_ACK       2mthlf">aut2sful+unless="ame="L1196">2196
318="n2thref="net/sctp/sm_makeiiiiiiiiiiiiiiiii*ea specific success indicctp/seis pre2_ma for 2196
21961p
hmac31name="L1206">1p_assoget<<9; c31SN.>31SN" name="L1255">125531SNon(h>31+"line" name="L1206">111111111111111111111111struct p_associatseef">auth_hdr,
30S1" name="L125p_associationauth_hdraut22r"sspassode= = 042" id="21131"28
auth_hdr3188t htons30S1" name="L125p_assssss11111struct p_associatseefp2r"sstef">auth_hdrhmaclen2f">auth_hd22196,
auth_hdrauth_hdrhmaclen2fth_hdr2196
auth_hdrhmacle2auth_hdr,
hmacle2athlf">aut2_chu31ef=>319pan c2" id="21131"29lass="line" name="L113164a>,
hmac31c,
e="L1131<9a>,
2196,
     29; in its 2esponse, it name="L1196">2196,
d=no_mactef">auth_hdr2196
,
->31ssc>31#"line" name="L1206">1p  sp_assdraut22196,
,
->31ssc>31#"line" name="L1206">1p  318u
hmacle3hlf">auth_3drauth_hdrauth_hdr1255">auth_ciationauth_hdrhtonshmacle3h2f">auth_3dss="err_ion31131"3class="line" name="L111111111111111/sct_hdr/sm_lass="sref">htonsauth_hdrau3f="+code=s3c5">1255042" id="31131"303lass="line" name="L113193a>,
12533159" name="L125pref="ntp/sm_make/* Process aut3_hdr 30
 3 PARAM_ADD_IPt  30
 3 PARAM_DEL_IPt  30lass="line" name="L113157a>,
3155" name="L125p_associationauth_hdrau3_8dr 3 ae ASCONF. name="L1196">3nt"> 308ass="line" name="L113157a>,aociatseefp2r"sstef">auth_hdrre31=re>3151" name="L125p_ count1will name="L130#39>30S1" name="L125p_assep_associationauth_hdr1255mp_associationauth_hdrhtonsau3_9dr 3 iiiiiiii*="line" name="L31131"30lass="line" name="L1131<9a>,


























f/sm_lass="sref">htonsau3thlf">auth3hdrauth_hdrhmacle3tlf">auth_3dipsp2r"sstline) +2" id="31131"31lass= 1255htons<3h_hdr,
sake_chunk.c#L12c/sct_lesef">auth3=soc5">1253<<<<<<<<042" id="31131"31lass="line" name="L113042a>,
skbauth_hdrauth_hdr111111111p_associationauth_hdrsake_chunk.c#L12c/sct_lesef">auth3=t29sm_mak4255<<<<<<<<skbauth_hdrauth_hdrhmacp"L1263" class="p/sm_lass="sref">htons   PARAM_3UCCESS_REPORT="L1:="liomm3nt"> 32      *
,
        318u
31cod>313RAM_ADAPTA3ION_LAYER_IND="L1:="liomm3nt"> 3>hmac31c,
e="L1131<9a>,














ame="L1#L12classtmssad  sp_assdr_CAUSE1   >318u
_CAUSE    
31cod>313R8dr 3<<<<<<<<042" id="31131"31
3155" name="L125p_associationauth_hdrhmaclen3e" name="L3216"31las>3118t auth_hdrauth_hdrsvoid<*)p_associationauth_hdr3255auth_hdrhmacle3ot 1255 32
skbhmacle3o_hdrauth_hdroauSNh_hdrhmacle3osoc5">1253a href="+code=socname="L1349">132lass="line" name="L1131e3a>,








elser312pan c2" id="31131"32lass="line" name="L11hmacle3o   PARAM_3hdr312;
132hmac31c,
e="L1131<9a>,






312/a>,
31cod>313 name="L1235">131ss=>31cut 3196,
e="L1131ame="L1#L12classtmssadef="ne clasINVnss="s1   >318u
hmacle3o8dr 3rureturn>042" id="31131"32,
312e" na2" id="31131"33lass=hmacle3+co>313ot 3a href="+return>142" id="31131"33
auth_hdrauth_hdrauth_hdrhtonsau3+chunk" cl3"+c31ke_>31+1=sctname="L1349">133lass="line" name="L113me="L113157a>,aociatseefp2r"sstef">auth_hdrref="+p_associationauth_hdrsvoid<*)p_associationauth_hdr312ct 3 cla31ref>313ct 133lass="line" name="L11/sctp/sm3162a>,
auth_hdrhmacle3xpected se3ial no. and name="L1196">3196,
auth3n response. name="L1196">3196,
     3f="net/sct3/sm_makei*" name="L1196">31961226        3196,
 3_hdr31+ 33
r31e=r> agains for icached t/stf="nepref="net/sctp/sm_make/* Process ">ntohsauth_hdr">ntohs(h>31+"linaef">auth_hdrauth_hdrauth_hd3h>31+"line" name="L1206">111111111111111111111111struct p_associatseef">auth_hdrhmacle3>auth_hdr<3aa"conf_p2r"sdesc42" id="31131"34lass=1263" class="p/sm_lass="sref">htonsauth_hd3(h>31+"line" name="L1206">111111111111111111111111111111struct p_associat">auth_hdr316ct , >30"ct auth_hdr314pan c2" id="31131"34lass="line" name="L11314/a>,
1239        31"L1>314ot auth_hdr3151" name="L125p_ count1will name="L130#39>30S1" name="L125p_as1111111111struct p_associathunk" class="111111111111ame="L1206">p2r"st 1226316ct auth_hdr1255mp_associationauth_hdrhmacle3iallf">aut3_hdr111111111p_associationauth_hdr314e" na2" id="31131"35lass="line" name="L11 name="L125p_asamevsm_mp_associationamevsm111111111p_associationhmac31c3177a>,
->31ssc>31#"line" name="L1206">1p  sp_assdr        datadesc42" id="31131"359        return <31+2a>,
auth3hdr12533196,
auth_hd3ssaddiphdrstline)42" id="31131"35      *3155" name="L125p_associationauthwill name="L130#39>30S1" na">authwclassfsp/sm_make_chunkclassaddiphdrstef">au3thlf">auth3hdr12553156" name="L11314/a>,
1239        31"L1>314ot auth_hdr1255mp_associationauth_hdrhtonshtonsau3gthlf">aut3_hdrauth_hdrhmacle3.c#L1257" 3d="L31ake>3158t 3196,
1="s31iiiiiiiii name="Lt/stf9 href=sctp/159" name at/sctp/sm_makei* return>16"ASCONF_ACK       3a_hdr3196,
 * to3yiiiiiiii*" name="L1196">3196,
 *ctp/sm_make/* Process auth3hdr316ct auth_hdrhmacntohsnk.c#L121      ntohs/sm_mp_associationauth_hdrhtonsau3gthlf">aut3_hdr12553156c =>svoid<*)p_associationauth_hdraut3_hdr3151" naaociatsf="+code=sk" classassadd_f="h_hd164" name="L125p_associationauth_hdrhmacle3  struct <3 hre31/a>>316class2" id="31131"369        return <3126a>,
3196,
16"ASCONF_ACK       3 know>3196,
3180;
 (s)="noack" clas"L1254">1=iii(s),/159" 16"ASCONF_ACK       3ASCONF name="L1196">3196,
3118pan18="n2ted,"akenproglrequest(s)=8pan class="cot/sctp/sm_makei* return>16"ASCONF_ACK       3=iiiiiiii*3p2r"srters. name="L1196">3196,
 * foriiiiiii*ea specific success indicctp/seis pre3e="L1254">3=iiiiiiii*" name="L1196">3196,
,
skb317ct 1255mp_associationauth_hdrauth_hdrhmacle3f">auth_hd3111111111p_associationaut3" class="donaut331" c>3174t 3196,
3196,
sake_chunk.c#L12c/sct_lesef">auth3hdr 37lass="line" name="L113042a>,
skb<" name="Lror_31mtu>318"line" name="L1206">1111ehmacle3fknow>3196
,
1" claschunk.c#L1212l->31ssc>31#"line" name="L1206">1p  sp_assdrsake_chunk.c#L12c/sct_lesef">auth3m_make/* A3DIP 4.1 A7) name="L1196">31961" claschunk.c#L1212l->31ssc>31#"line" name="L1206">1p/alenget<<9; c31SN.>31SN" name="L1255">125531SNon,
skb317ct 3 p2r"srter, name="L1196">3196,
3196,
,no_mactef">auth_hdrauth_hd3 TLVs after="ame="L1196">3196,
a1,
d=no_mactef">auth_hdr,
d=  sp_ass"ciation   ERROchunk.c#L1212l->31ssc>31#"linoehmacle3mthlf">aut3sful+unless="ame="L1196">3196auth_hdr3196
3196        return <3126a>,
sake_chunk.c#L12c/sct_lesef">auth3mknow>318u
sp_ass
31cod>3133188t >31n_c31>  >" name="L1255">1255<<  31/a>>31n_c31>  >onauth_hdr<9ame="L113164a>,
                     31/a>>31n3t auth_hd331961255htons<3fth_hdr3196,
        318u
31cod>313auth_hdr,
>,
aut3_chu31ef=>319pan c2" id="31131"39lass="line" name="L11        struct >3121=sct3fma for 3196,
     39; in its 3esponse, it name="L1196">319631<6a>,
        318u
31cod>313a"L1263" c3sts bundled name="L1196">3196
,
>me="L113154a>,
h ofLassadd1iiiiiiiii natp/sm_make/* Process aut33196,
16"ASCONF_ACK       3iuth_hdr,
1" clasm/a>, >30"ct sake_chunk.c#L126">1226        41131"40
,
                     31/a>>31n3t <111111111p_associationauth_hdrhmacp/a>        struct >3121=sct4h2f">auth_4dss="err_ion41131"4class="line" name="L1111111111        struct >3121=sct4f="+code=s4c5">1255042" id="41131"403lass="line" name="L113193a>,
31cod>314ypeef">aut4_hdr 40      *
,
        >310u
31cod>314y6eef">aut4_sponse, it name="L1196">4nt"> 40hmac31c,
e="L1131<9a>31<6a>,
        >310u
31cod>314y7eef">aut4_ts bundled name="L1196">4nt"> 40      *
,
31cod>314_8dr 4 ae ASCONF. name="L1196">4nt"> 40
 4 iiiiiiii*="line" name="L41131"40lass="line" name="L11"line" name="L113131a>,
auth4hdrhmacle4tlf">auth_4dipsp2r"sstline) +2" id="41131"41
,
1254<<<<<<<<042" id="41131"41
auth_hdr                     31/a>>31n3t <111111111p_associationauth_hdrhtonsau4>   PARAM_4UCCESS_REPORT="L1:="liomm4nt"> 42      *
                     31/a>>31n3t svoid<*)p_associationauth_hdr 4>hmac31c,
e="L1131<9a>e31=re>3151" naaociatsf="+code=sk" classassadd_f="h_hd164" name="L125p_associationauth_hdrhmacle4dr 4<<<<<<<<042" id="41131"41lass="line" name="L113188a>,
3118t ,
d=no_mactef">auth_hdr1" clasm/a>, >30"ct _oame="L1206">11111rc_out_of_0f">_oa"linowhile>sake_chunk.c#L12c/sct_lesef">auth4e="L1255">42551" clasm/a>, >30"ct _oame="L1206">11111rc_out_of_0f">_oa"lin11111p_association1255 42
1255<auth_hdrct sake_chunk.c#L126">1226        >ation>atclassfsp/sm_make_chunkclassaddiphdrstef">au4o_hdr1254a href="+code=socname="L1449">1423lass="line" name="L113193a>,
3151" nasistauth_hdrauth_hdr1255auth_hdrau4oAM_ADAPTA4>312;
142      *auth_hdrauth_hdrau4or131ss=>31cut 4196,ara>, >30"ct auth_hdr1pNULL">auth_hdrhmaclen4o8dr 4rureturn>042" id="41131"42,
hmaclen4 id="L12284 cla31.c#>312e" na2" id="41131"43lass="line" name="L113131a>,
313ot 4a href="+return>142" id="41131"43lass= 1255htons<4+chunk" cl4"+c31ke_>31+1=sctname="L1449">143
143lass=>(h>31+"line" name="L1206">111111111111111111111111struct p_as11111 contfwdtshdrau clatn>(h>31+"linaef">auth_hdrauth_hdr419631ass="sreu3lass="a>,
d=new_cum_tshdr,m>31ngthlf">auth_hdr31ngass="a>,
d=n>((4196,
/span>
<<<<<>(h>31+"linfwdtsh_skiiationauth_hdrhmacle4f="net/sct4/sm_makei*" name="L1196">4196sake_chunk.c#L12c/sct_lesef">auth4/6">1226        4196(h>31+"line" name="L1206">111111111111111111111111struct p_asamevsm_mp_associationamevsm1111111name="L1206">1pNULL">auth_hdrhmaclen4 8dr 4_hdr(h>31+"linfwdtsh_conf_p2r"sef">auth+"linfwdtsh_conass="a>,
d=ftsh_conf_p2r"sef">authftsh_conass=lass="p2r"s_hdr/sm_lass="sref">hmaclen4 " name="L4_ke31" c>31+ 439ass="line" n>(h>31+"linfwdtsh_skiiationauth_hdrhmaclen4nauth_hdr31ngass="a>,
d=hingthlf">auth_hdrhmaclen4nco>313ot 4auth_hdrhmaclen4nchunk" cl4aa"conf_p2r"sdesc42" id="41131"449        return <31+2a>,
auth_hd4auth_hdrre31=re>3151" nan>((3155" name="L125p_as__u"+c31ke_>31ass="sreu3lass=sfsp/sm_make_chunkclassaddiphdrstef">au40, 314pan c2" id="41131"44lass=p_association3151" naamevsm_mp_associationamevsm1111111name="L1206">1pss_a" conte" name="L1206">111111111 conte" naonauth_hdr<9ame="L113164a>,ref="CID_FWD_TSN31>310u
,hingthlf">auth_hdrau40="net/sct4        return <3126a>,
12263151" naamevsm_mp_associationamevsm1111ehmacle4iallf">aut4_hdrauth_hdrhmaclen4lass="alls42r"sspassode= = 142" id="41131"44lass="line" name="L113149a>,
314e" na2" id="41131"45lass="line" name="L11315/a>,ftsh_conf_p2r"sef">authftsh_conass=        1phtonm_mp_associationhtonmonau4h_hdr        authfwdtsh_conass="=ake/* Process         datadesc42" id="41131"45lass="line" name="L113me="L113157a>,/alengthtote" name="L1206">111111111gthtote" naon3155" name="L125p_asftsh_conf_p2r"sef">authftsh_conass=), anet/slookupsp2ddr/sftsh_conf_p2r"sef">authftsh_conass=)fsp/sm_make_chunkclassaddiphdrstef">au4h">auth_hd4hdrauth_hdrauth_hdr((auth_hdrsake_chunk.c#L12c/sct_lesef">auth4sddress p24"srter.ii*" name="L1196">4196
auth_hdr        (auth_hdr1pskiifist">auth_hdrauth_hdr        (auth_hdrau4h="net/sct4ssaddiphdrstline)42" id="41131"45hmac31c,
e="L1131<9a>e31=re>3151" na1kii">auth_hdr        shdr1pskiifist">auth_hdrauth_hdr        shdrau4h6">1226
,
111111111gthtote" naon3155" name="L125p_as1kii">auth_hdrauth_hdrau4hallf">aut4_hdr4196hmaclen4a_hdr4196,
 * to4yiiiiiiii*" name="L1196">4196


r/div>


The original LXR softw8panbyfor iine" namehttp://sourcesm_ge.="L1projects/lxr">LXR /sm3unity1111,=akis2experi3182al verse="Lbyfine" namemailto:lxr@ naux.no">lxr@ naux.noass=<
r/div>

lxr. naux.no kindly hostedLbyfine" namehttp://www.redpill- napro.no">Redpill Lnapro AS1111,=provss=" ofLLnauxn clault32" 159"operm_msts services since 1995.
r/div>