Steve Jacobson's "Resurrection of the Swinburne CAIA MPTCP on FreeBSD Repository" Page


Locating and recovering the Swinburne CAIA BitBucket Mercurial MPTCP on FreeBSD repository

  • The Swinburne University of Technology Centre for Advanced Internet Architectures (CAIA) Multipath TCP home page contains information about their work to develop MPTCP support on FreeBSD. The web page includes a link to the Swinburne CAIA BitBucket Repository. Unfortunately, it is now a dead link.

  • In a post to the FreeBSD Forums, ondra_knezour reveals a Software Heritage web page, which links to what are believed to be archives of the Swinburne CAIA BitBucket Mercurial repository and metadata. Props to ondra_knezour for locating this!

  • I was able to download, untar and check out software from this archive. See below for instructions.

    Downloading the repository and the metadata:

  • Download the repository and metadata from the Software Heritage nw-swin/caia-mptcp-freebsd archive web page.

    Untarring the repository and the metadata:

  • Untarring the repository posed some challenges:

    % cd /tmp/caia_mptcp/repository
    % ls -l
    -rw-r--r--  1 stevej  wheel  885596804 Feb 28 17:40 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repository.tar.gz
    # Could be -zxpf, but -zxf worked:
    % tar -zxf 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repository.tar.gz
    
    8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/dirstate: Hard-link target './.hg/undo.dirstate' does not exist.
    tar: Error exit delayed from previous errors.
    % 
    
    Note that this work was done on a FreeBSD 11.2-RELEASE system, using tar: bsdtar 3.3.2 - libarchive 3.3.2 zlib/1.2.11 liblzma/5.2.3 bz2lib/1.0.6 and /bin/tcsh.

    Analysis of the target directory indicated that all files extracted before the error were in place.

  • Working around the untar error:

    #
    # This script had to be written to work around the tar error.
    # Doing so required analysis of the tar file.  See below in
    # this web page for the analysis and the script.
    #
    % cd /tmp/caia_mptcp/repository
    % sh ext_rep.sh
    
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/00changelog.i
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/hgrc
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.desc
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.branch
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.bookmarks
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/tags2-visible
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-names-v1
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/branch2-base
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-revs-v1
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/hgtagsfnodes1
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/tags2-visible
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-names-v1
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/branch2-base
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-revs-v1
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/hgtagsfnodes1
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/blackbox.log
    x 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/requires
    %
    
  • Note that a newer version of BSD tar, or a different lineage of tar such as gnu tar, might be able to extract the repository without error.

  • Untarring the metadata was straightforward. As of this writing, I have not found a use for the metadata.

    Installing Mercurial:

    This is only necessary if you don't already have Mercurial installed on your system.

    Mercurial is a revision control system similar to a mix of svn and git. It is necessary to interact with the Mercurial repository extracted from the tar file.

    This builds and installs mercurial-4.8.1, which is in the default ports collection that came with FreeBSD 11.2-RELEASE.

    % su root
    % cd /usr/ports/devel/mercurial
    % make DISABLE_VULNERABILITIES=yes
    % make install
    % exit
    

    Using Mercurial to check out (clone) software from the repository:

    % cd    # to home directory
    % mkdir hg_mptcp
    % hg clone /tmp/caia_mptcp/repository/8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo hg_mptcp
    

    Looking at the checked out code:

    % cd hg_mptcp
    % ls -la
    total 688
    drwxr-xr-x   24 stevej  stevej    1024 Mar  3 19:05 .
    drwxr-xr-x   15 stevej  stevej    1024 Mar  3 18:25 ..
    -rw-r--r--    1 stevej  stevej     115 Mar  3 19:02 .arcconfig
    -rw-r--r--    1 stevej  stevej     418 Mar  3 19:02 .arclint
    drwxr-xr-x    4 stevej  stevej     512 Mar  3 19:05 .hg
    -rw-r--r--    1 stevej  stevej    6142 Mar  3 19:02 COPYRIGHT
    -rw-r--r--    1 stevej  stevej     687 Mar  3 19:02 LOCKS
    -rw-r--r--    1 stevej  stevej    5514 Mar  3 19:02 MAINTAINERS
    -rw-r--r--    1 stevej  stevej   21849 Mar  3 19:02 Makefile
    -rw-r--r--    1 stevej  stevej   84625 Mar  3 19:02 Makefile.inc1
    -rw-r--r--    1 stevej  stevej    6181 Mar  3 19:02 Makefile.libcompat
    -rw-r--r--    1 stevej  stevej  379684 Mar  3 19:02 ObsoleteFiles.inc
    -rw-r--r--    1 stevej  stevej    2626 Mar  3 19:02 README
    -rw-r--r--    1 stevej  stevej   68326 Mar  3 19:02 UPDATING
    drwxr-xr-x   42 stevej  stevej    1024 Mar  3 19:02 bin
    drwxr-xr-x    9 stevej  stevej     512 Mar  3 19:02 cddl
    drwxr-xr-x   88 stevej  stevej    1536 Mar  3 19:03 contrib
    drwxr-xr-x    5 stevej  stevej     512 Mar  3 19:03 crypto
    drwxr-xr-x   27 stevej  stevej    2048 Mar  3 19:03 etc
    drwxr-xr-x    5 stevej  stevej     512 Mar  3 19:03 gnu
    drwxr-xr-x    8 stevej  stevej    2048 Mar  3 19:03 include
    drwxr-xr-x    8 stevej  stevej     512 Mar  3 19:03 kerberos5
    drwxr-xr-x  113 stevej  stevej    2560 Mar  3 19:03 lib
    drwxr-xr-x   37 stevej  stevej    1024 Mar  3 19:03 libexec
    drwxr-xr-x   15 stevej  stevej     512 Mar  3 19:03 release
    drwxr-xr-x    4 stevej  stevej     512 Mar  3 19:03 rescue
    drwxr-xr-x   90 stevej  stevej    2048 Mar  3 19:03 sbin
    drwxr-xr-x    7 stevej  stevej     512 Mar  3 19:03 secure
    drwxr-xr-x   28 stevej  stevej     512 Mar  3 19:03 share
    drwxr-xr-x   56 stevej  stevej    1024 Mar  3 19:05 sys
    drwxr-xr-x    3 stevej  stevej     512 Mar  3 19:05 targets
    drwxr-xr-x    5 stevej  stevej     512 Mar  3 19:05 tests
    drwxr-xr-x   15 stevej  stevej     512 Mar  3 19:05 tools
    drwxr-xr-x  279 stevej  stevej    5120 Mar  3 19:05 usr.bin
    drwxr-xr-x  223 stevej  stevej    4096 Mar  3 19:05 usr.sbin
    %
    
    % ls -la sys/netinet/*mptcp*
    -rw-r--r--  1 stevej  stevej   2977 Mar  3 19:04 sys/netinet/mptcp.h
    -rw-r--r--  1 stevej  stevej   8769 Mar  3 19:04 sys/netinet/mptcp_cc.c
    -rw-r--r--  1 stevej  stevej   4688 Mar  3 19:04 sys/netinet/mptcp_cc.h
    -rw-r--r--  1 stevej  stevej   2656 Mar  3 19:04 sys/netinet/mptcp_cc_module.h
    -rw-r--r--  1 stevej  stevej   4676 Mar  3 19:04 sys/netinet/mptcp_deftcp_cc.c
    -rw-r--r--  1 stevej  stevej   7873 Mar  3 19:04 sys/netinet/mptcp_dumbrr.c
    -rw-r--r--  1 stevej  stevej   4992 Mar  3 19:04 sys/netinet/mptcp_event.c
    -rw-r--r--  1 stevej  stevej   6115 Mar  3 19:04 sys/netinet/mptcp_lowrtt.c
    -rw-r--r--  1 stevej  stevej  33478 Mar  3 19:04 sys/netinet/mptcp_options.c
    -rw-r--r--  1 stevej  stevej   6165 Mar  3 19:04 sys/netinet/mptcp_pcb.c
    -rw-r--r--  1 stevej  stevej   3822 Mar  3 19:04 sys/netinet/mptcp_pcb.h
    -rw-r--r--  1 stevej  stevej    781 Mar  3 19:04 sys/netinet/mptcp_proto.c
    -rw-r--r--  1 stevej  stevej   8989 Mar  3 19:04 sys/netinet/mptcp_sched.c
    -rw-r--r--  1 stevej  stevej   5044 Mar  3 19:04 sys/netinet/mptcp_sched.h
    -rw-r--r--  1 stevej  stevej   2643 Mar  3 19:04 sys/netinet/mptcp_sched_module.h
    -rw-r--r--  1 stevej  stevej  40019 Mar  3 19:04 sys/netinet/mptcp_subr.c
    -rw-r--r--  1 stevej  stevej  21463 Mar  3 19:04 sys/netinet/mptcp_usrreq.c
    -rw-r--r--  1 stevej  stevej  24443 Mar  3 19:04 sys/netinet/mptcp_var.h
    %
    

    Possibly interesting files in the repository:

    As I was poking around in the repository, I noticed the files below. It looks like certain files, such as _r_e_a_d_m_e.i and _t_o_d_o.i could contain useful information. I don't know how to access the content in those files at this time.

    % cd /tmp/caia_mptcp/repository/8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo
    % cd .hg/store/data
    % ls -la
    total 1112
    drwxr-xr-x   28 stevej  wheel    1536 Mar  3 18:57 .
    drwxr-xr-x    4 stevej  wheel     512 Mar  3 19:05 ..
    -rw-r--r--    2 stevej  wheel    5283 Feb 17  2020 _c_o_p_y_r_i_g_h_t.i
    -rw-r--r--    2 stevej  wheel    1678 Feb 17  2020 _c_v_s-_i_n_f_o.i
    -rw-r--r--    2 stevej  wheel    1229 Feb 17  2020 _h_w._t_r_o_u_b_l_e.i
    -rw-r--r--    2 stevej  wheel    1037 Feb 17  2020 _l_o_c_k_s.i
    -rw-r--r--    2 stevej  wheel   35988 Feb 17  2020 _m_a_i_n_t_a_i_n_e_r_s.i
    -rw-r--r--    2 stevej  wheel    9831 Feb 17  2020 _makefile.alpha.i
    -rw-r--r--    2 stevej  wheel  132163 Feb 17  2020 _makefile.i
    -rw-r--r--    2 stevej  wheel    5306 Feb 17  2020 _makefile.inc0.i
    -rw-r--r--    2 stevej  wheel  189213 Feb 17  2020 _makefile.inc1.d
    -rw-r--r--    2 stevej  wheel   74944 Feb 17  2020 _makefile.inc1.i
    -rw-r--r--    2 stevej  wheel    1510 Feb 17  2020 _makefile.lib32.i
    -rw-r--r--    2 stevej  wheel    5826 Feb 17  2020 _makefile.libcompat.i
    -rw-r--r--    2 stevej  wheel     620 Feb 17  2020 _makefile.mips.i
    -rw-r--r--    2 stevej  wheel    7367 Feb 17  2020 _makefile.upgrade.i
    -rw-r--r--    2 stevej  wheel  133733 Feb 17  2020 _obsolete_files.inc.i
    -rw-r--r--    2 stevej  wheel   11416 Feb 17  2020 _r_e_a_d_m_e.i
    -rw-r--r--    2 stevej  wheel    5880 Feb 17  2020 _t_o_d_o.i
    -rw-r--r--    2 stevej  wheel    8939 Feb 17  2020 _u_p_d_a_t_i_n_g.64_b_t_t.i
    -rw-r--r--    2 stevej  wheel  238483 Feb 17  2020 _u_p_d_a_t_i_n_g.d
    -rw-r--r--    2 stevej  wheel   60992 Feb 17  2020 _u_p_d_a_t_i_n_g.i
    drwxr-xr-x   43 stevej  wheel    1024 Feb 17  2020 bin
    drwxr-xr-x    9 stevej  wheel     512 Feb 17  2020 cddl
    drwxr-xr-x    3 stevej  wheel     512 Feb 17  2020 compat
    drwxr-xr-x  119 stevej  wheel    2048 Feb 17  2020 contrib
    drwxr-xr-x    8 stevej  wheel     512 Feb 17  2020 crypto
    drwxr-xr-x   34 stevej  wheel    1024 Feb 17  2020 e_bones
    drwxr-xr-x   39 stevej  wheel    3584 Feb 17  2020 etc
    drwxr-xr-x   46 stevej  wheel    1024 Feb 17  2020 games
    drwxr-xr-x   10 stevej  wheel     512 Mar  3 18:56 gnu
    drwxr-xr-x    8 stevej  wheel    3072 Mar  3 18:56 include
    -rw-r--r--    2 stevej  wheel    4801 Feb 17  2020 installworld__newk.i
    -rw-r--r--    2 stevej  wheel    5781 Feb 17  2020 installworld__oldk.i
    drwxr-xr-x    9 stevej  wheel     512 Mar  3 18:56 kerberos5
    drwxr-xr-x    8 stevej  wheel     512 Mar  3 18:55 kerberos_i_v
    -rw-r--r--    2 stevej  wheel    4785 Feb 17  2020 kern__racct.c.i
    drwxr-xr-x  162 stevej  wheel    3072 Feb 17  2020 lib
    drwxr-xr-x   53 stevej  wheel    1536 Mar  3 18:56 libexec
    drwxr-xr-x   36 stevej  wheel    1024 Feb 17  2020 lkm
    drwxr-xr-x   23 stevej  wheel    2048 Mar  3 18:55 release
    drwxr-xr-x    4 stevej  wheel     512 Mar  3 18:56 rescue
    drwxr-xr-x  153 stevej  wheel    3584 Mar  3 18:55 sbin
    drwxr-xr-x    9 stevej  wheel     512 Mar  3 18:55 secure
    drwxr-xr-x   38 stevej  wheel    1024 Mar  3 18:55 share
    drwxr-xr-x   86 stevej  wheel    1536 Mar  3 18:55 sys
    drwxr-xr-x    3 stevej  wheel     512 Mar  3 18:56 targets
    drwxr-xr-x    6 stevej  wheel     512 Feb 17  2020 tests
    drwxr-xr-x   17 stevej  wheel     512 Mar  3 18:55 tools
    drwxr-xr-x  347 stevej  wheel    6144 Feb 17  2020 usr.bin
    drwxr-xr-x  332 stevej  wheel    6656 Mar  3 18:56 usr.sbin
    -rw-r--r--    2 stevej  wheel    1087 Feb 17  2020 ~2earcconfig.i
    -rw-r--r--    2 stevej  wheel     388 Feb 17  2020 ~2earclint.i
    -rw-r--r--    2 stevej  wheel     310 Feb 17  2020 ~2ehgtags.i
    %
    

    Analyzing the untar failure:

    According to various resources on the web, this failure is due to a hard link to a file in the archive.

  • Extracting a manifest from the tar file, and analyzing it:

    % cd /tmp/caia_mptcp/repository
    % tar -tvvf 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repository.tar.gz > xxx
    % wc xxx
      135473 1219261 21162274 xxx
    % vi xxx
    
     . . .
    
    #
    # These lines represent the only hard link in the repository:
    #
    -rw-r--r--  0 boatbucket boatbucket       40 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.dirstate
    hrw-r--r--  0 boatbucket boatbucket        0 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/dirstate link to ./.hg/undo.dirstate
    
     . . .
    
    #
    # These lines are at the tail end of the repository manifest.
    # Fortunately, the hard link is very near the end of the archive!
    #
    -rw-r--r--  0 boatbucket boatbucket       40 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.dirstate
    hrw-r--r--  0 boatbucket boatbucket        0 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/dirstate link to ./.hg/undo.dirstate
    -rw-r--r--  0 boatbucket boatbucket       57 Feb 15  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/00changelog.i
    -rw-r--r--  0 boatbucket boatbucket      314 Apr 30  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/hgrc
    -rw-r--r--  0 boatbucket boatbucket       79 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.desc
    -rw-r--r--  0 boatbucket boatbucket        7 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.branch
    -rw-r--r--  0 boatbucket boatbucket        0 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.bookmarks
    drwxr-xr-x  0 boatbucket boatbucket        0 May 12  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/
    -rw-r--r--  0 boatbucket boatbucket      106 May 12  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/tags2-visible
    -rw-r--r--  0 boatbucket boatbucket       52 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-names-v1
    -rw-r--r--  0 boatbucket boatbucket      230 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/branch2-base
    -rw-r--r--  0 boatbucket boatbucket  1651440 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-revs-v1
    -rw-r--r--  0 boatbucket boatbucket  4954320 Feb 17  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/hgtagsfnodes1
    -rw-r--r--  0 boatbucket boatbucket    38624 Jul 15  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/blackbox.log
    -rw-r--r--  0 boatbucket boatbucket       59 Feb 15  2020 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/requires
    Archive Format: GNU tar format,  Compression: gzip
    
    Analysis of the target directory indicated that all files extracted before the error were in place.

    The script:

  • This quick-and-dirty script extracts the files that were left behind when the original untar failed.

    % cd /tmp/caia_mptcp/repository
    % cat ext_rep.sh
    #!/bin/sh
    #
    
    for FN in                                                                    \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/00changelog.i        \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/hgrc                 \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.desc            \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.branch          \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/undo.bookmarks       \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/               \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/tags2-visible  \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-names-v1   \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/branch2-base   \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/rbc-revs-v1    \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/cache/hgtagsfnodes1  \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/blackbox.log         \
            8232ffcf-0557-48ef-9c33-2eb2327a63ac-repo/./.hg/requires
    do
            tar -zxvpf 8232ffcf-0557-48ef-9c33-2eb2327a63ac-repository.tar.gz ${FN}
    done
    %
    
  • Note that the script does not restore the "dirstate" hard link. This should be done. However, the absence of this link did not appear to affect the "hg clone" operation.

  • Note also that the script uses the "-p" option to tar. This works, but may or may not be desirable.

    Preliminary information about the software:

    From doing the following:

    % cd hg_mptcp/sys/netinet
    % hg log mptcp*
    
    It appears that:

  • The earliest checkin was Jul 08 2015. This was to branch caia-mptcp-head.

  • The last checkin to branch caia-mptcp-head was Nov 10 2015.

  • The first checkin to branch caia-mptcp-head-modular was Aug 25 2016.

  • The last checkin to branch caia-mptcp-head-modular was Dec 11 2016.

    The branch cloned from the repository is:

    % cd hg_mptcp
    % hg branch
        caia-mptcp-head-modular
    %
    
    The branches available are:

    % hg branches --color false
        caia-mptcp-head-modular   206429:8bce76737680
        freebsd-head              206428:f5b3e14db539
        caia-mptcp-head           198991:7324d0b79152
    %
    
    The tags available are:

    % hg tags --color false
        tip                            206429:8bce76737680
        caia-mptcp-v0.51               196491:c124a2c6d7cf
    %
    
    The software revision is:

    % hg identify -n
        206429
    %
    

    Reference:

  • Steve Jacobson's main web page regarding MPTCP support in FreeBSD.

    Under Construction!