From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 09:37:11 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id BC243FF0 for ; Sun, 8 Sep 2013 09:37:11 +0000 (UTC) (envelope-from ccqin@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 98FD2244B for ; Sun, 8 Sep 2013 09:37:11 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r889bB1x086536 for ; Sun, 8 Sep 2013 09:37:11 GMT (envelope-from ccqin@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r889bBT6086519 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 09:37:11 GMT (envelope-from ccqin@FreeBSD.org) Date: Sun, 8 Sep 2013 09:37:11 GMT Message-Id: <201309080937.r889bBT6086519@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to ccqin@FreeBSD.org using -f From: ccqin@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257107 - in soc2013/ccqin/head/sys: dev/ath net80211 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 09:37:11 -0000 Author: ccqin Date: Sun Sep 8 09:37:11 2013 New Revision: 257107 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257107 Log: fix ratectl mbuf tag stuffs, add some debug msgs. * for __complete__ that without ratectl mbuf tag, feed a tmp ieee80211_rc_info. * for reassoc node, init the ratectl node only when it's a new assoc. * print the rc_flags of rc series after complete_rc_flags. Modified: soc2013/ccqin/head/sys/dev/ath/if_ath.c soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Modified: soc2013/ccqin/head/sys/dev/ath/if_ath.c ============================================================================== --- soc2013/ccqin/head/sys/dev/ath/if_ath.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/dev/ath/if_ath.c Sun Sep 8 09:37:11 2013 (r257107) @@ -324,6 +324,7 @@ sc->sc_ah = ah; sc->sc_invalid = 0; /* ready to go, enable interrupt handling */ #ifdef ATH_DEBUG + ath_debug |= ATH_DEBUG_NODE; sc->sc_debug = ath_debug; #endif @@ -4089,19 +4090,27 @@ bf->bf_state.bfs_pktlen, 1, (ts->ts_status == 0 ? 0 : 1)); #endif - mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, - NET80211_TAG_RATECTL, NULL); - if (NULL != mtag) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - ieee80211_ratectl_rc_info_set(rc_info, - 1, (ts->ts_status == 0 ? 0 : 1), - bf->bf_state.bfs_pktlen, - ts->ts_shortretry, ts->ts_longretry, - ts->ts_finaltsi, ts->ts_rate); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + /* net80211 ratectl */ + mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, + NET80211_TAG_RATECTL, NULL); + if (NULL == mtag) { IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); + "%s: no ratectl mbuf tag found.\n", __func__); + struct ieee80211_rc_info tmp_rc_info; + rc_info = &tmp_rc_info; + bzero(rc_info, sizeof(rc_info)); + } else { + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: found ratectl mbuf tag.\n", __func__); + rc_info = (struct ieee80211_rc_info*)(mtag + 1); + } + + ieee80211_ratectl_rc_info_set(rc_info, + 1, (ts->ts_status == 0 ? 0 : 1), + bf->bf_state.bfs_pktlen, + ts->ts_shortretry, ts->ts_longretry, + ts->ts_finaltsi, ts->ts_rate); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } ath_tx_default_comp(sc, bf, 0); } else @@ -5607,7 +5616,11 @@ #if 0 ath_rate_newassoc(sc, an, isnew); #endif - ieee80211_ratectl_node_init(ni); + + DPRINTF(sc, ATH_DEBUG_NODE, "%s: newassoc is new: %d\n", + __func__, isnew); + if (isnew) + ieee80211_ratectl_node_init(ni); if (isnew && (vap->iv_flags & IEEE80211_F_PRIVACY) == 0 && sc->sc_hasclrkey && Modified: soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c ============================================================================== --- soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c Sun Sep 8 09:37:11 2013 (r257107) @@ -1420,13 +1420,15 @@ /* net80211 ratectl */ mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, NET80211_TAG_RATECTL, NULL); +again: if (NULL == mtag) { mtag = m_tag_alloc(MTAG_ABI_NET80211, NET80211_TAG_RATECTL, sizeof(struct ieee80211_rc_info), M_NOWAIT); - if (NULL == mtag) - return; - IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't alloc mbuf tag for ratectl.\n", __func__); + if (NULL == mtag) { + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: can't alloc mbuf tag for ratectl.\n", __func__); + goto again; + } } else IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, "%s: nani? find mbuf tag for ratectl directly.\n", __func__); @@ -4152,19 +4154,28 @@ ts, bf->bf_state.bfs_pktlen, 1, (ts->ts_status == 0) ? 0 : 1); #endif - mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, - NET80211_TAG_RATECTL, NULL); - if (NULL != mtag) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - ieee80211_ratectl_rc_info_set(rc_info, - 1, (ts->ts_status == 0 ? 0 : 1), - bf->bf_state.bfs_pktlen, - ts->ts_shortretry, ts->ts_longretry, - ts->ts_finaltsi, ts->ts_rate); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + + /* net80211 ratectl */ + mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, + NET80211_TAG_RATECTL, NULL); + if (NULL == mtag) { + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: no ratectl mbuf tag found.\n", __func__); + struct ieee80211_rc_info tmp_rc_info; + rc_info = &tmp_rc_info; + bzero(rc_info, sizeof(rc_info)); + } else { IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); + "%s: found ratectl mbuf tag.\n", __func__); + rc_info = (struct ieee80211_rc_info*)(mtag + 1); + } + + ieee80211_ratectl_rc_info_set(rc_info, + 1, (ts->ts_status == 0 ? 0 : 1), + bf->bf_state.bfs_pktlen, + ts->ts_shortretry, ts->ts_longretry, + ts->ts_finaltsi, ts->ts_rate); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } ath_tx_default_comp(sc, bf, fail); @@ -4549,23 +4560,29 @@ bf_first->bf_state.bfs_pktlen, bf_first->bf_state.bfs_nframes, bf_first->bf_state.bfs_nframes); #endif - + /* net80211 ratectl */ mtag = m_tag_locate(bf_first->bf_m, MTAG_ABI_NET80211, NET80211_TAG_RATECTL, NULL); - - if (NULL != mtag) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - ieee80211_ratectl_rc_info_set(rc_info, - bf_first->bf_state.bfs_nframes, - bf_first->bf_state.bfs_nframes, - bf_first->bf_state.bfs_pktlen, - ts.ts_shortretry, ts.ts_longretry, - ts.ts_finaltsi, ts.ts_rate); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + if (NULL == mtag) { IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); - + "%s: no ratectl mbuf tag found.\n", __func__); + struct ieee80211_rc_info tmp_rc_info; + rc_info = &tmp_rc_info; + bzero(rc_info, sizeof(rc_info)); + } else { + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: found ratectl mbuf tag.\n", __func__); + rc_info = (struct ieee80211_rc_info*)(mtag + 1); + } + + ieee80211_ratectl_rc_info_set(rc_info, + bf_first->bf_state.bfs_nframes, + bf_first->bf_state.bfs_nframes, + bf_first->bf_state.bfs_pktlen, + ts.ts_shortretry, ts.ts_longretry, + ts.ts_finaltsi, ts.ts_rate); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); + ATH_TX_LOCK(sc); tap = ath_tx_get_tx_tid(an, tid->tid); sc->sc_stats.ast_tx_aggr_failall++; @@ -4843,7 +4860,7 @@ */ mtag = m_tag_locate(bf_first->bf_m, MTAG_ABI_NET80211, NET80211_TAG_RATECTL, NULL); - + DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: txa_start=%d, tx_ok=%d, status=%.8x, flags=%.8x, " "isaggr=%d, seq_st=%d, hasba=%d, ba=%.8x, %.8x\n", @@ -4965,16 +4982,24 @@ ath_tx_update_ratectrl(sc, ni, rc, &ts, pktlen, nframes, nbad); #endif - if (NULL != mtag) { + /* net80211 ratectl */ + if (NULL == mtag) { + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: no ratectl mbuf tag found.\n", __func__); + struct ieee80211_rc_info tmp_rc_info; + rc_info = &tmp_rc_info; + bzero(rc_info, sizeof(rc_info)); + } else { + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: found ratectl mbuf tag.\n", __func__); rc_info = (struct ieee80211_rc_info*)(mtag + 1); - ieee80211_ratectl_rc_info_set(rc_info, + } + + ieee80211_ratectl_rc_info_set(rc_info, nframes, nbad, pktlen, ts.ts_shortretry, ts.ts_longretry, ts.ts_finaltsi, ts.ts_rate); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else - IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } /* @@ -5075,17 +5100,24 @@ mtag = m_tag_locate(bf->bf_m, MTAG_ABI_NET80211, NET80211_TAG_RATECTL, NULL); - if (NULL != mtag) { - rc_info = (struct ieee80211_rc_info*)(mtag + 1); - ieee80211_ratectl_rc_info_set(rc_info, - 1, (ts.ts_status == 0 ? 0 : 1), - bf->bf_state.bfs_pktlen, - ts.ts_shortretry, ts.ts_longretry, - ts.ts_finaltsi, ts.ts_rate); - ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); - } else + if (NULL == mtag) { IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: can't locate mbuf tag for ratectl.\n", __func__); + "%s: no ratectl mbuf tag found.\n", __func__); + struct ieee80211_rc_info tmp_rc_info; + rc_info = &tmp_rc_info; + bzero(rc_info, sizeof(rc_info)); + } else { + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: found ratectl mbuf tag.\n", __func__); + rc_info = (struct ieee80211_rc_info*)(mtag + 1); + } + + ieee80211_ratectl_rc_info_set(rc_info, + 1, (ts.ts_status == 0 ? 0 : 1), + bf->bf_state.bfs_pktlen, + ts.ts_shortretry, ts.ts_longretry, + ts.ts_finaltsi, ts.ts_rate); + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } /* * This is called early so atid->hwq_depth can be tracked. Modified: soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c Sun Sep 8 09:37:11 2013 (r257107) @@ -315,7 +315,10 @@ rs = ieee80211_ratectl_get_rateset(ni); rt = ieee80211_get_ratetable(ni->ni_ic->ic_curchan); - + IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_RATECTL, + "%s: channel flags: 0x%08x\n", __func__, + ni->ni_ic->ic_curchan->ic_flags); + rix = amrr_rate(ni, NULL, 0); rc[0].flags = rc[1].flags = rc[2].flags = rc[3].flags = 0; Modified: soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Sat Sep 7 22:40:32 2013 (r257106) +++ soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Sun Sep 8 09:37:11 2013 (r257107) @@ -229,5 +229,9 @@ rc[i].tx_power_cap = ieee80211_get_node_txpower(ni); } + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "%s: flags: rc[0]:0x%08x, rc[1]:0x%08x, " + "rc[2]:0x%08x, rc[3]:0x%08x\n", __func__, + rc[0].flags, rc[1].flags, rc[2].flags, rc[3].flags); } From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 10:57:27 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 9E1AB7AA for ; Sun, 8 Sep 2013 10:57:27 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 7CD2C27C6 for ; Sun, 8 Sep 2013 10:57:27 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88AvRiF080053 for ; Sun, 8 Sep 2013 10:57:27 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88AvRin080043 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 10:57:27 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 10:57:27 GMT Message-Id: <201309081057.r88AvRin080043@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257111 - in soc2013/mattbw: . backend backend/query MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 10:57:27 -0000 Author: mattbw Date: Sun Sep 8 10:57:27 2013 New Revision: 257111 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257111 Log: Add job test to Makefile; update README. Also did a tiny bit of indent. Modified: soc2013/mattbw/README soc2013/mattbw/backend/Makefile soc2013/mattbw/backend/query/check.c Modified: soc2013/mattbw/README ============================================================================== --- soc2013/mattbw/README Sun Sep 8 09:46:22 2013 (r257110) +++ soc2013/mattbw/README Sun Sep 8 10:57:27 2013 (r257111) @@ -35,6 +35,7 @@ this involves clang33 being installed.) - Run `make install` as root to install the backend into PackageKit's backends directory. + - If you have ATF/kyua installed, run `make tests` to create the tests. - Edit /usr/local/PackageKit/PackageKit.conf such that "DefaultBackend=pkgng" (or manually invoke packagekitd with backend=pkgng). @@ -45,24 +46,28 @@ TESTING -Currently, testing facilities are very limited. Testing will likely occur in -full after the basic featureset has been roughly implemented. - -There is currently one test, in the tests/get-details-output directory; this -checks the GetDetails output from pkcon against a mockup built from `pkg query` -to make sure it outputs sane data. At the time of writing, it is not finished, -but to run it cd to that directory, run `make`, ensure `pkcon` is set up to use -pkgng as its backend, then run `./test.sh`. +The backend has ATF unit tests. To run these: + - Install ATF or kyua (should be in FreeBSD ports); + - Run `make tests` in the backend directory; + - Run `atf-run | atf-report` in the backend, backend/query and backend/jobs + directories. + +There are also some functional tests, in the form of shell scripts, scattered +in the tests/ directory. Generally these will require you to use the test +repo (at timeof writing, http://www-student.cs.york.ac.uk/~mbw500/testrepo/). +Make sure PackageKit is using pkgng as its backend. -------------------------------------------------------------------------------- KNOWN BUGS -- InstallPackages is not yet fully implemented. - Behaviour when a repository has multiple versions of a package is currently ill-defined (the first one in the iterator will be emitted). This requires further work. - Minor cosmetic issues (progress bars not updating properly, etc.) may exist. +- Some options to actions (recursion in GetDetails, repo signing requirements, + etc) are not yet implemented. +- Cancel is not implemented. -------------------------------------------------------------------------------- Modified: soc2013/mattbw/backend/Makefile ============================================================================== --- soc2013/mattbw/backend/Makefile Sun Sep 8 09:46:22 2013 (r257110) +++ soc2013/mattbw/backend/Makefile Sun Sep 8 10:57:27 2013 (r257111) @@ -75,6 +75,7 @@ namever_test \ pkgutils_test \ repo_test \ + jobs/check_test \ query/id_test \ query/check_test \ @@ -103,6 +104,12 @@ tests: ${TESTPROGS} # TODO: Find a more BSD way of doing this +jobs/check_test: jobs/check_test.o jobs/check.o namever.o testutils.o query/check.o query/id.o pkgutils.o repo.o + ${CC} ${LDFLAGS} ${TESTLDFLAGS} -o ${.TARGET} ${.ALLSRC} ${LIBS} ${TESTLIBS} + +jobs/check_test.o: jobs/check_test.c + ${CC} ${CFLAGS} ${TESTCFLAGS} -o ${.TARGET} -c ${.ALLSRC} + query/id_test: query/id_test.o query/id.o namever.o testutils.o ${CC} ${LDFLAGS} ${TESTLDFLAGS} -o ${.TARGET} ${.ALLSRC} ${LIBS} ${TESTLIBS} Modified: soc2013/mattbw/backend/query/check.c ============================================================================== --- soc2013/mattbw/backend/query/check.c Sun Sep 8 09:46:22 2013 (r257110) +++ soc2013/mattbw/backend/query/check.c Sun Sep 8 10:57:27 2013 (r257111) @@ -34,14 +34,14 @@ /* Attempts to match a set of QueryIDs into packages. */ -static bool string_match(const char *left, const char *right); +static bool string_match(const char *left, const char *right); /* Returns true if the given package matches the given query ID. */ bool query_check_package(struct pkg *package, struct query_id *query_id) { bool matches; - char *namever; + char *namever; const char *arch; const char *name; const char *repo; @@ -66,8 +66,8 @@ /* * Allow raw names to match the Query ID namever, as well as - * the full package namevers. - * This allows Resolve to work properly. + * the full package namevers. This allows Resolve to work + * properly. */ namever_matches_name = string_match(query_id->namever, name); namever_matches_namever = string_match(query_id->namever, From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 11:03:25 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 10665828 for ; Sun, 8 Sep 2013 11:03:25 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id EF4E9280B for ; Sun, 8 Sep 2013 11:03:24 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88B3OBG067263 for ; Sun, 8 Sep 2013 11:03:24 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88B3OV6067223 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 11:03:24 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 11:03:24 GMT Message-Id: <201309081103.r88B3OV6067223@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257113 - soc2013/mattbw/backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 11:03:25 -0000 Author: mattbw Date: Sun Sep 8 11:03:24 2013 New Revision: 257113 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257113 Log: Run indent on the backend directory C and H files. This accidentally indented the PackageKit headers included. Oops! Modified: soc2013/mattbw/backend/db.c soc2013/mattbw/backend/db.h soc2013/mattbw/backend/egg-string.h soc2013/mattbw/backend/emit.h soc2013/mattbw/backend/event.c soc2013/mattbw/backend/event.h soc2013/mattbw/backend/group.h soc2013/mattbw/backend/jobs.h soc2013/mattbw/backend/licenses.c soc2013/mattbw/backend/namever.c soc2013/mattbw/backend/namever.h soc2013/mattbw/backend/namever_test.c soc2013/mattbw/backend/pk-backend-pkgng.c soc2013/mattbw/backend/pk-backend.h soc2013/mattbw/backend/pk-store.h soc2013/mattbw/backend/pkgutils.c soc2013/mattbw/backend/pkgutils_test.c soc2013/mattbw/backend/repo.c soc2013/mattbw/backend/search.c soc2013/mattbw/backend/search.h soc2013/mattbw/backend/testutils.c soc2013/mattbw/backend/utils.c soc2013/mattbw/backend/utils.h Modified: soc2013/mattbw/backend/db.c ============================================================================== --- soc2013/mattbw/backend/db.c Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/db.c Sun Sep 8 11:03:24 2013 (r257113) @@ -38,9 +38,9 @@ * Opens a pkgdb ready for remote operations. This will always return TRUE if * and only if a database ready for use is now pointed to by *db, and FALSE * if and only if there isn't. - * + * * This will also emit PackageKit errors if it fails. - * + * * This must be called during the lifetime of "backend", eg after * "pk_backend_initialize" and before "pk_backend_destroy". */ @@ -58,7 +58,6 @@ if (has_access) { db = open_remote_direct(backend); } - return db; } @@ -72,7 +71,6 @@ pkgdb_close(*db_p); *db_p = NULL; } - assert(*db_p == NULL); } @@ -89,11 +87,10 @@ PK_ERROR_ENUM_NOT_AUTHORIZED, "cannot access database"); } - return (err == EPKG_OK); } -static struct pkgdb * +static struct pkgdb * open_remote_direct(PkBackend *backend) { int err; @@ -108,9 +105,8 @@ PK_ERROR_ENUM_CANNOT_GET_LOCK, "cannot open database"); } - - assert (err == EPKG_OK || backend == NULL); - assert (err != EPKG_OK || backend != NULL); + assert(err == EPKG_OK || backend == NULL); + assert(err != EPKG_OK || backend != NULL); return db; } Modified: soc2013/mattbw/backend/db.h ============================================================================== --- soc2013/mattbw/backend/db.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/db.h Sun Sep 8 11:03:24 2013 (r257113) @@ -25,6 +25,6 @@ #include "pkg.h" /* struct pkgdb */ struct pkgdb *db_open_remote(PkBackend *backend); -void db_close(struct pkgdb **db_p); +void db_close (struct pkgdb **db_p); #endif /* !_PKGNG_BACKEND_DB_H_ */ Modified: soc2013/mattbw/backend/egg-string.h ============================================================================== --- soc2013/mattbw/backend/egg-string.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/egg-string.h Sun Sep 8 11:03:24 2013 (r257113) @@ -1,22 +1,23 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * +/* + * -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + * * Copyright (C) 2007-2008 Richard Hughes - * + * * Licensed under the GNU General Public License Version 2 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __EGG_STRING_H @@ -26,23 +27,23 @@ G_BEGIN_DECLS -guint egg_strlen (const gchar *text, - guint len) - G_GNUC_WARN_UNUSED_RESULT; -gboolean egg_strzero (const gchar *text) - G_GNUC_WARN_UNUSED_RESULT; -gboolean egg_strvequal (gchar **id1, - gchar **id2) - G_GNUC_WARN_UNUSED_RESULT; -gboolean egg_strtoint (const gchar *text, - gint *value); -gboolean egg_strtouint (const gchar *text, - guint *value); -gchar *egg_strreplace (const gchar *text, - const gchar *find, - const gchar *replace); -void egg_string_test (gpointer user_data); +guint egg_strlen(const gchar *text, + guint len) +G_GNUC_WARN_UNUSED_RESULT; + gboolean egg_strzero(const gchar *text) + G_GNUC_WARN_UNUSED_RESULT; + gboolean egg_strvequal(gchar **id1, + gchar **id2) + G_GNUC_WARN_UNUSED_RESULT; + gboolean egg_strtoint(const gchar *text, + gint * value); + gboolean egg_strtouint(const gchar *text, + guint * value); + gchar *egg_strreplace(const gchar *text, + const gchar *find, + const gchar *replace); + void egg_string_test(gpointer user_data); G_END_DECLS -#endif /* __EGG_STRING_H */ +#endif /* __EGG_STRING_H */ Modified: soc2013/mattbw/backend/emit.h ============================================================================== --- soc2013/mattbw/backend/emit.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/emit.h Sun Sep 8 11:03:24 2013 (r257113) @@ -24,7 +24,7 @@ #include "pk-backend.h" /* Pk... */ #include "pkg.h" /* pkg... */ -void emit_package(struct pkg *pkg, PkBackend *backend, PkInfoEnum info); -void emit_filtered_package(struct pkg *pkg, PkBackend *backend, PkBitfield filters, PkInfoEnum info); +void emit_package(struct pkg *pkg, PkBackend *backend, PkInfoEnum info); +void emit_filtered_package(struct pkg *pkg, PkBackend *backend, PkBitfield filters, PkInfoEnum info); #endif /* !_PKGNG_BACKEND_EMIT_H_ */ Modified: soc2013/mattbw/backend/event.c ============================================================================== --- soc2013/mattbw/backend/event.c Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/event.c Sun Sep 8 11:03:24 2013 (r257113) @@ -102,7 +102,7 @@ * throw an error code here. What we'll do (mainly for debug * purposes) is post the error into the backend so we can * retrieve it if it was fatal. - * + * * pk_backend_set_string seems to strdup, so we don't have to. */ (void)pk_backend_set_string(backend, "job_error", Modified: soc2013/mattbw/backend/event.h ============================================================================== --- soc2013/mattbw/backend/event.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/event.h Sun Sep 8 11:03:24 2013 (r257113) @@ -23,6 +23,6 @@ #include "pkg.h" /* struct pkg_event */ -int event_cb(void *backend, struct pkg_event *event); +int event_cb (void *backend, struct pkg_event *event); #endif /* !_PKGNG_BACKEND_EVENT_H_ */ Modified: soc2013/mattbw/backend/group.h ============================================================================== --- soc2013/mattbw/backend/group.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/group.h Sun Sep 8 11:03:24 2013 (r257113) @@ -27,6 +27,6 @@ PkBitfield group_bitfield(void); PkGroupEnum group_from_origin(const char *origin); PkGroupEnum group_of_pkg(struct pkg *pkg); -char * group_list_to_origin_regex(unsigned int groupc, PkGroupEnum *groupv); +char *group_list_to_origin_regex(unsigned int groupc, PkGroupEnum *groupv); #endif /* _PKGNG_BACKEND_GROUPS_H_ */ Modified: soc2013/mattbw/backend/jobs.h ============================================================================== --- soc2013/mattbw/backend/jobs.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/jobs.h Sun Sep 8 11:03:24 2013 (r257113) @@ -22,8 +22,7 @@ #define _PKGNG_BACKEND_JOBS_H_ /* - * The high-level interface for jobs in jobs/do.h now. - * TODO: remove this file + * The high-level interface for jobs in jobs/do.h now. TODO: remove this file */ #include "jobs/do.h" Modified: soc2013/mattbw/backend/licenses.c ============================================================================== --- soc2013/mattbw/backend/licenses.c Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/licenses.c Sun Sep 8 11:03:24 2013 (r257113) @@ -43,13 +43,13 @@ struct sbuf *sb; /* - * GCC worries about this being NULL, so initialise it here. - * Clang worries about the lack of enum saturation, so it doesn't - * ever get used as a default though. + * GCC worries about this being NULL, so initialise it here. Clang + * worries about the lack of enum saturation, so it doesn't ever get + * used as a default though. */ #ifndef __clang__ logic_str = " "; -#endif /* !__clang__ */ +#endif /* !__clang__ */ pkg_get(pkg, PKG_LICENSE_LOGIC, &logic); switch (logic) { @@ -71,7 +71,8 @@ (void)sbuf_cat(sb, logic_str); (void)sbuf_cat(sb, pkg_license_name(lic)); } - /* Stop the following code from bombing if there was no license + /* + * Stop the following code from bombing if there was no license * available. */ if (sbuf_len(sb) == 0) @@ -80,8 +81,8 @@ sb_err = sbuf_finish(sb); /* Make sure that we remove the initial logic string instance! */ license = (sb_err - ? strerror(errno) - : (sbuf_data(sb) + strlen(logic_str))); + ? strerror(errno) + : (sbuf_data(sb) + strlen(logic_str))); license_dup = strdup(license); sbuf_delete(sb); Modified: soc2013/mattbw/backend/namever.c ============================================================================== --- soc2013/mattbw/backend/namever.c Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/namever.c Sun Sep 8 11:03:24 2013 (r257113) @@ -28,19 +28,19 @@ /* * Functions for dealing with "namevers" (name-version strings). - * + * * This file CANNOT depend on the PackageKit backend. */ /* * Joins a name and a version to form a namever. - * + * * To be freed using free(3). Result may be NULL. */ -char * +char * namever_from_name_and_version(const char *name, const char *version) { - char *result; + char *result; assert(name != NULL); assert(version != NULL); @@ -52,13 +52,13 @@ /* * Allocates and returns a string of the form "name-version" that identifies * the given package's name and version. - * + * * To be freed using free(3). Result may be NULL. */ -char * +char * namever_from_package(struct pkg *package) { - char *result; + char *result; assert(package != NULL); @@ -70,14 +70,14 @@ /* * Allocates and returns a string of the form "name-version" that contains * the name and version elements of a PackageID. - * + * * To be freed using free(3). */ -char * +char * namever_from_package_id(const gchar *package_id) { - char *result; - gchar **id_splits; + char *result; + gchar **id_splits; assert(package_id != NULL); @@ -91,10 +91,10 @@ return result; } -char ** +char ** namever_array_from_package_ids(gchar **package_ids, guint count) { - char **namevers; + char **namevers; unsigned int i; assert(package_ids != NULL); @@ -109,7 +109,6 @@ } } } - return namevers; } @@ -117,7 +116,7 @@ void namever_array_free(char ***namevers_p, guint count) { - unsigned int i; + unsigned int i; assert(namevers_p != NULL); @@ -128,6 +127,5 @@ free(*namevers_p); *namevers_p = NULL; } - assert(*namevers_p == NULL); } Modified: soc2013/mattbw/backend/namever.h ============================================================================== --- soc2013/mattbw/backend/namever.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/namever.h Sun Sep 8 11:03:24 2013 (r257113) @@ -24,10 +24,10 @@ #include /* gchar, guint */ #include "pkg.h" /* struct pkg */ -char *namever_from_name_and_version(const char *name, const char *version); -char *namever_from_package(struct pkg *package); -char *namever_from_package_id(const gchar *package_id); -char **namever_array_from_package_ids(gchar **package_ids, guint count); +char *namever_from_name_and_version(const char *name, const char *version); +char *namever_from_package(struct pkg *package); +char *namever_from_package_id(const gchar *package_id); +char **namever_array_from_package_ids(gchar **package_ids, guint count); void namever_array_free(char ***namevers_p, guint count); #endif /* !_PKGNG_BACKEND_NAMEVER_H_ */ Modified: soc2013/mattbw/backend/namever_test.c ============================================================================== --- soc2013/mattbw/backend/namever_test.c Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/namever_test.c Sun Sep 8 11:03:24 2013 (r257113) @@ -35,7 +35,7 @@ } ATF_TC_BODY(test_namever_from_name_and_version, tc) { - char *namever; + char *namever; namever = namever_from_name_and_version("foo", "1.2.3"); ATF_CHECK_STREQ(namever, "foo-1.2.3"); @@ -51,7 +51,7 @@ } ATF_TC_BODY(test_namever_from_package_id, tc) { - char *namever; + char *namever; namever = namever_from_package_id("foo;1.2.3;freebsd:10:x86:32;lohac"); ATF_CHECK_STREQ(namever, "foo-1.2.3"); @@ -66,8 +66,8 @@ } ATF_TC_BODY(test_namever_array_from_package_ids, tc) { - char *package_ids[9]; - char **namevers; + char *package_ids[9]; + char **namevers; unsigned int i; /* Full PackageIDs */ @@ -116,7 +116,7 @@ } ATF_TC_BODY(test_namever_from_package, tc) { - char *namever; + char *namever; struct pkg *package; package = gen_pkg(PKG_FILE); Modified: soc2013/mattbw/backend/pk-backend-pkgng.c ============================================================================== --- soc2013/mattbw/backend/pk-backend-pkgng.c Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/pk-backend-pkgng.c Sun Sep 8 11:03:24 2013 (r257113) @@ -91,7 +91,7 @@ gchar **package_ids, gboolean recursive) { - INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ + INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ INTENTIONALLY_IGNORE(package_ids); /* retrieved from backend */ INTENTIONALLY_IGNORE(recursive); /* retrieved from backend */ assert(backend != NULL); @@ -121,7 +121,7 @@ gchar **package_ids, gboolean recursive) { - INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ + INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ INTENTIONALLY_IGNORE(package_ids); /* retrieved from backend */ INTENTIONALLY_IGNORE(recursive); /* retrieved from backend */ assert(backend != NULL); @@ -208,7 +208,7 @@ pk_backend_refresh_cache(PkBackend *backend, gboolean force) { - INTENTIONALLY_IGNORE(force); /* retrieved from backend */ + INTENTIONALLY_IGNORE(force); /* retrieved from backend */ assert(backend != NULL); THREAD(backend, refresh_cache_thread); } @@ -229,7 +229,7 @@ pk_backend_resolve(PkBackend *backend, PkBitfield filters, gchar **package_ids) { - INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ + INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ INTENTIONALLY_IGNORE(package_ids); /* retrieved from backend */ assert(backend != NULL); THREAD(backend, resolve_thread); @@ -239,8 +239,8 @@ pk_backend_search_files(PkBackend *backend, PkBitfield filters, gchar **search) { - INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ - INTENTIONALLY_IGNORE(search); /* retrieved from backend */ + INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ + INTENTIONALLY_IGNORE(search); /* retrieved from backend */ assert(backend != NULL); THREAD(backend, search_files_thread); } @@ -249,8 +249,8 @@ pk_backend_search_groups(PkBackend *backend, PkBitfield filters, gchar **search) { - INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ - INTENTIONALLY_IGNORE(search); /* retrieved from backend */ + INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ + INTENTIONALLY_IGNORE(search); /* retrieved from backend */ assert(backend != NULL); THREAD(backend, search_groups_thread); } @@ -259,8 +259,8 @@ pk_backend_search_names(PkBackend *backend, PkBitfield filters, gchar **search) { - INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ - INTENTIONALLY_IGNORE(search); /* retrieved from backend */ + INTENTIONALLY_IGNORE(filters); /* retrieved from backend */ + INTENTIONALLY_IGNORE(search); /* retrieved from backend */ assert(backend != NULL); THREAD(backend, search_names_thread); } Modified: soc2013/mattbw/backend/pk-backend.h ============================================================================== --- soc2013/mattbw/backend/pk-backend.h Sun Sep 8 10:04:26 2013 (r257112) +++ soc2013/mattbw/backend/pk-backend.h Sun Sep 8 11:03:24 2013 (r257113) @@ -1,22 +1,23 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * +/* + * -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + * * Copyright (C) 2007-2010 Richard Hughes - * + * * Licensed under the GNU General Public License Version 2 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __PK_BACKEND_H @@ -50,16 +51,14 @@ typedef struct PkBackendPrivate PkBackendPrivate; -typedef struct -{ - GObject parent; - PkBackendPrivate *priv; +typedef struct { + GObject parent; + PkBackendPrivate *priv; } PkBackend; -typedef struct -{ - GObjectClass parent_class; -} PkBackendClass; +typedef struct { + GObjectClass parent_class; +} PkBackendClass; /** * PK_BACKEND_PERCENTAGE_INVALID: @@ -68,407 +67,408 @@ */ #define PK_BACKEND_PERCENTAGE_INVALID 101 -GType pk_backend_get_type (void); -PkBackend *pk_backend_new (void); -gboolean pk_backend_lock (PkBackend *backend) - G_GNUC_WARN_UNUSED_RESULT; -gboolean pk_backend_unlock (PkBackend *backend) - G_GNUC_WARN_UNUSED_RESULT; -gboolean pk_backend_reset (PkBackend *backend); -gboolean pk_backend_set_name (PkBackend *backend, - const gchar *name, - GError **error) - G_GNUC_WARN_UNUSED_RESULT; -gboolean pk_backend_set_proxy (PkBackend *backend, - const gchar *proxy_http, - const gchar *proxy_ftp); -gboolean pk_backend_set_root (PkBackend *backend, - const gchar *root); -gchar *pk_backend_get_name (PkBackend *backend) - G_GNUC_WARN_UNUSED_RESULT; -gboolean pk_backend_get_is_finished (PkBackend *backend); - -gchar *pk_backend_get_description (PkBackend *backend) - G_GNUC_WARN_UNUSED_RESULT; -gchar *pk_backend_get_author (PkBackend *backend) - G_GNUC_WARN_UNUSED_RESULT; -typedef gchar *(*PkBackendGetCompatStringFunc) (PkBackend *backend); -PkBitfield pk_backend_get_groups (PkBackend *backend); -PkBitfield pk_backend_get_filters (PkBackend *backend); -PkBitfield pk_backend_get_roles (PkBackend *backend); -gchar *pk_backend_get_mime_types (PkBackend *backend); -gboolean pk_backend_has_set_error_code (PkBackend *backend); -gboolean pk_backend_is_implemented (PkBackend *backend, - PkRoleEnum role); -gchar *pk_backend_get_accepted_eula_string (PkBackend *backend); -void pk_backend_cancel (PkBackend *backend); -void pk_backend_download_packages (PkBackend *backend, - gchar **package_ids, - const gchar *directory); -void pk_backend_initialize (PkBackend *backend); -void pk_backend_destroy (PkBackend *backend); -void pk_backend_transaction_start (PkBackend *backend); -void pk_backend_transaction_stop (PkBackend *backend); -void pk_backend_get_categories (PkBackend *backend); -void pk_backend_get_depends (PkBackend *backend, - PkBitfield filters, - gchar **package_ids, - gboolean recursive); -void pk_backend_get_details (PkBackend *backend, - gchar **package_ids); -void pk_backend_get_distro_upgrades (PkBackend *backend); -void pk_backend_get_files (PkBackend *backend, - gchar **package_ids); -void pk_backend_get_requires (PkBackend *backend, - PkBitfield filters, - gchar **package_ids, - gboolean recursive); -void pk_backend_get_update_detail (PkBackend *backend, - gchar **package_ids); -void pk_backend_get_updates (PkBackend *backend, - PkBitfield filters); -void pk_backend_install_packages (PkBackend *backend, - gboolean only_trusted, - gchar **package_ids); -void pk_backend_install_signature (PkBackend *backend, - PkSigTypeEnum type, - const gchar *key_id, - const gchar *package_id); -void pk_backend_install_files (PkBackend *backend, - gboolean only_trusted, - gchar **full_paths); -void pk_backend_refresh_cache (PkBackend *backend, - gboolean force); -void pk_backend_remove_packages (PkBackend *backend, - gchar **package_ids, - gboolean allow_deps, - gboolean autoremove); -void pk_backend_resolve (PkBackend *backend, - PkBitfield filters, - gchar **packages); -void pk_backend_rollback (PkBackend *backend, - const gchar *transaction_id); -void pk_backend_search_details (PkBackend *backend, - PkBitfield filters, - gchar **search); -void pk_backend_search_files (PkBackend *backend, - PkBitfield filters, - gchar **search); -void pk_backend_search_groups (PkBackend *backend, - PkBitfield filters, - gchar **search); -void pk_backend_search_names (PkBackend *backend, - PkBitfield filters, - gchar **search); -void pk_backend_update_packages (PkBackend *backend, - gboolean only_trusted, - gchar **package_ids); -void pk_backend_update_system (PkBackend *backend, - gboolean only_trusted); -void pk_backend_get_repo_list (PkBackend *backend, - PkBitfield filters); -void pk_backend_repo_enable (PkBackend *backend, - const gchar *repo_id, - gboolean enabled); -void pk_backend_repo_set_data (PkBackend *backend, - const gchar *repo_id, - const gchar *parameter, - const gchar *value); -void pk_backend_what_provides (PkBackend *backend, - PkBitfield filters, - PkProvidesEnum provides, - gchar **search); -void pk_backend_get_packages (PkBackend *backend, - PkBitfield filters); -void pk_backend_simulate_install_files (PkBackend *backend, - gchar **full_paths); -void pk_backend_simulate_install_packages (PkBackend *backend, - gchar **package_ids); -void pk_backend_simulate_remove_packages (PkBackend *backend, - gchar **package_ids, - gboolean autoremove); -void pk_backend_simulate_update_packages (PkBackend *backend, - gchar **package_ids); -void pk_backend_upgrade_system (PkBackend *backend, - const gchar *distro_id, - PkUpgradeKindEnum upgrade_kind); +GType pk_backend_get_type(void); +PkBackend *pk_backend_new(void); +gboolean +pk_backend_lock(PkBackend *backend) +G_GNUC_WARN_UNUSED_RESULT; + gboolean pk_backend_unlock(PkBackend *backend) + G_GNUC_WARN_UNUSED_RESULT; + gboolean pk_backend_reset(PkBackend *backend); + gboolean pk_backend_set_name(PkBackend *backend, + const gchar *name, + GError ** error) + G_GNUC_WARN_UNUSED_RESULT; + gboolean pk_backend_set_proxy(PkBackend *backend, + const gchar *proxy_http, + const gchar *proxy_ftp); + gboolean pk_backend_set_root(PkBackend *backend, + const gchar *root); + gchar *pk_backend_get_name(PkBackend *backend) + G_GNUC_WARN_UNUSED_RESULT; + gboolean pk_backend_get_is_finished(PkBackend *backend); + + gchar *pk_backend_get_description(PkBackend *backend) + G_GNUC_WARN_UNUSED_RESULT; + gchar *pk_backend_get_author(PkBackend *backend) + G_GNUC_WARN_UNUSED_RESULT; + typedef gchar *(*PkBackendGetCompatStringFunc) (PkBackend *backend); + PkBitfield pk_backend_get_groups(PkBackend *backend); + PkBitfield pk_backend_get_filters(PkBackend *backend); + PkBitfield pk_backend_get_roles(PkBackend *backend); + gchar *pk_backend_get_mime_types(PkBackend *backend); + gboolean pk_backend_has_set_error_code(PkBackend *backend); + gboolean pk_backend_is_implemented(PkBackend *backend, + PkRoleEnum role); + gchar *pk_backend_get_accepted_eula_string(PkBackend *backend); + void pk_backend_cancel(PkBackend *backend); + void pk_backend_download_packages(PkBackend *backend, + gchar **package_ids, + const gchar *directory); + void pk_backend_initialize(PkBackend *backend); + void pk_backend_destroy(PkBackend *backend); + void pk_backend_transaction_start(PkBackend *backend); + void pk_backend_transaction_stop(PkBackend *backend); + void pk_backend_get_categories(PkBackend *backend); + void pk_backend_get_depends(PkBackend *backend, + PkBitfield filters, + gchar **package_ids, + gboolean recursive); + void pk_backend_get_details(PkBackend *backend, + gchar **package_ids); + void pk_backend_get_distro_upgrades(PkBackend *backend); + void pk_backend_get_files(PkBackend *backend, + gchar **package_ids); + void pk_backend_get_requires(PkBackend *backend, + PkBitfield filters, + gchar **package_ids, + gboolean recursive); + void pk_backend_get_update_detail(PkBackend *backend, + gchar **package_ids); + void pk_backend_get_updates(PkBackend *backend, + PkBitfield filters); + void pk_backend_install_packages(PkBackend *backend, + gboolean only_trusted, + gchar **package_ids); + void pk_backend_install_signature(PkBackend *backend, + PkSigTypeEnum type, + const gchar *key_id, + const gchar *package_id); + void pk_backend_install_files(PkBackend *backend, + gboolean only_trusted, + gchar **full_paths); + void pk_backend_refresh_cache(PkBackend *backend, + gboolean force); + void pk_backend_remove_packages(PkBackend *backend, + gchar **package_ids, + gboolean allow_deps, + gboolean autoremove); + void pk_backend_resolve(PkBackend *backend, + PkBitfield filters, + gchar **packages); + void pk_backend_rollback(PkBackend *backend, + const gchar *transaction_id); + void pk_backend_search_details(PkBackend *backend, + PkBitfield filters, + gchar **search); + void pk_backend_search_files(PkBackend *backend, + PkBitfield filters, + gchar **search); + void pk_backend_search_groups(PkBackend *backend, + PkBitfield filters, + gchar **search); + void pk_backend_search_names(PkBackend *backend, + PkBitfield filters, + gchar **search); + void pk_backend_update_packages(PkBackend *backend, + gboolean only_trusted, + gchar **package_ids); + void pk_backend_update_system(PkBackend *backend, + gboolean only_trusted); + void pk_backend_get_repo_list(PkBackend *backend, + PkBitfield filters); + void pk_backend_repo_enable(PkBackend *backend, + const gchar *repo_id, + gboolean enabled); + void pk_backend_repo_set_data(PkBackend *backend, + const gchar *repo_id, + const gchar *parameter, + const gchar *value); + void pk_backend_what_provides(PkBackend *backend, + PkBitfield filters, + PkProvidesEnum provides, + gchar **search); + void pk_backend_get_packages(PkBackend *backend, + PkBitfield filters); + void pk_backend_simulate_install_files(PkBackend *backend, + gchar **full_paths); + void pk_backend_simulate_install_packages(PkBackend *backend, + gchar **package_ids); + void pk_backend_simulate_remove_packages(PkBackend *backend, + gchar **package_ids, + gboolean autoremove); + void pk_backend_simulate_update_packages(PkBackend *backend, + gchar **package_ids); + void pk_backend_upgrade_system(PkBackend *backend, + const gchar *distro_id, + PkUpgradeKindEnum upgrade_kind); /* set the state */ -gboolean pk_backend_accept_eula (PkBackend *backend, - const gchar *eula_id); -gboolean pk_backend_is_eula_valid (PkBackend *backend, - const gchar *eula_id); -gboolean pk_backend_set_role (PkBackend *backend, - PkRoleEnum role); -PkRoleEnum pk_backend_get_role (PkBackend *backend); -gboolean pk_backend_set_status (PkBackend *backend, - PkStatusEnum status); -gboolean pk_backend_set_allow_cancel (PkBackend *backend, - gboolean allow_cancel); -gboolean pk_backend_set_percentage (PkBackend *backend, - guint percentage); -gboolean pk_backend_set_sub_percentage (PkBackend *backend, - guint percentage); -gboolean pk_backend_set_speed (PkBackend *backend, - guint speed); -gboolean pk_backend_set_exit_code (PkBackend *backend, - PkExitEnum exit); -gboolean pk_backend_set_transaction_data (PkBackend *backend, - const gchar *data); -gboolean pk_backend_set_simultaneous_mode (PkBackend *backend, - gboolean simultaneous); -gboolean pk_backend_set_locale (PkBackend *backend, - const gchar *code); -gboolean pk_backend_set_frontend_socket (PkBackend *backend, - const gchar *frontend_socket); -void pk_backend_set_cache_age (PkBackend *backend, - guint cache_age); + gboolean pk_backend_accept_eula(PkBackend *backend, + const gchar *eula_id); + gboolean pk_backend_is_eula_valid(PkBackend *backend, + const gchar *eula_id); + gboolean pk_backend_set_role(PkBackend *backend, + PkRoleEnum role); + PkRoleEnum pk_backend_get_role(PkBackend *backend); + gboolean pk_backend_set_status(PkBackend *backend, + PkStatusEnum status); + gboolean pk_backend_set_allow_cancel(PkBackend *backend, + gboolean allow_cancel); + gboolean pk_backend_set_percentage(PkBackend *backend, + guint percentage); + gboolean pk_backend_set_sub_percentage(PkBackend *backend, + guint percentage); + gboolean pk_backend_set_speed(PkBackend *backend, + guint speed); + gboolean pk_backend_set_exit_code(PkBackend *backend, + PkExitEnum exit); + gboolean pk_backend_set_transaction_data(PkBackend *backend, + const gchar *data); + gboolean pk_backend_set_simultaneous_mode(PkBackend *backend, + gboolean simultaneous); + gboolean pk_backend_set_locale(PkBackend *backend, + const gchar *code); + gboolean pk_backend_set_frontend_socket(PkBackend *backend, + const gchar *frontend_socket); + void pk_backend_set_cache_age(PkBackend *backend, + guint cache_age); /* get the state */ -gboolean pk_backend_get_allow_cancel (PkBackend *backend); -gboolean pk_backend_get_is_error_set (PkBackend *backend); -gboolean pk_backend_get_progress (PkBackend *backend, - guint *percentage, - guint *subpercentage, - guint *elapsed, - guint *remaining); -guint pk_backend_get_runtime (PkBackend *backend); -gchar *pk_backend_get_proxy_ftp (PkBackend *backend); -gchar *pk_backend_get_proxy_http (PkBackend *backend); -const gchar *pk_backend_get_root (PkBackend *backend); -gchar *pk_backend_get_locale (PkBackend *backend); -gchar *pk_backend_get_frontend_socket (PkBackend *backend); -guint pk_backend_get_cache_age (PkBackend *backend); + gboolean pk_backend_get_allow_cancel(PkBackend *backend); + gboolean pk_backend_get_is_error_set(PkBackend *backend); + gboolean pk_backend_get_progress(PkBackend *backend, + guint * percentage, + guint * subpercentage, + guint * elapsed, + guint * remaining); + guint pk_backend_get_runtime(PkBackend *backend); + gchar *pk_backend_get_proxy_ftp(PkBackend *backend); + gchar *pk_backend_get_proxy_http(PkBackend *backend); + const gchar *pk_backend_get_root(PkBackend *backend); + gchar *pk_backend_get_locale(PkBackend *backend); + gchar *pk_backend_get_frontend_socket(PkBackend *backend); + guint pk_backend_get_cache_age(PkBackend *backend); /* signal helpers */ -gboolean pk_backend_finished (PkBackend *backend); -gboolean pk_backend_package (PkBackend *backend, - PkInfoEnum info, - const gchar *package_id, - const gchar *summary); -gboolean pk_backend_repo_detail (PkBackend *backend, - const gchar *repo_id, - const gchar *description, - gboolean enabled); -gboolean pk_backend_update_detail (PkBackend *backend, - const gchar *package_id, - const gchar *updates, - const gchar *obsoletes, - const gchar *vendor_url, - const gchar *bugzilla_url, - const gchar *cve_url, - PkRestartEnum restart, - const gchar *update_text, - const gchar *changelog, - PkUpdateStateEnum state, - const gchar *issued, - const gchar *updated); -gboolean pk_backend_require_restart (PkBackend *backend, - PkRestartEnum restart, - const gchar *package_id); -gboolean pk_backend_message (PkBackend *backend, - PkMessageEnum message, - const gchar *details, ...); -gboolean pk_backend_details (PkBackend *backend, - const gchar *package_id, - const gchar *license, - PkGroupEnum group, - const gchar *description, - const gchar *url, - gulong size); -gboolean pk_backend_files (PkBackend *backend, - const gchar *package_id, - const gchar *filelist); -gboolean pk_backend_distro_upgrade (PkBackend *backend, - PkDistroUpgradeEnum type, - const gchar *name, - const gchar *summary); -gboolean pk_backend_error_code (PkBackend *backend, - PkErrorEnum code, - const gchar *details, ...); -gboolean pk_backend_repo_signature_required (PkBackend *backend, - const gchar *package_id, - const gchar *repository_name, - const gchar *key_url, - const gchar *key_userid, - const gchar *key_id, - const gchar *key_fingerprint, - const gchar *key_timestamp, - PkSigTypeEnum type); -gboolean pk_backend_eula_required (PkBackend *backend, - const gchar *eula_id, - const gchar *package_id, - const gchar *vendor_name, - const gchar *license_agreement); -gboolean pk_backend_media_change_required (PkBackend *backend, - PkMediaTypeEnum media_type, - const gchar *media_id, - const gchar *media_text); -gboolean pk_backend_category (PkBackend *backend, - const gchar *parent_id, - const gchar *cat_id, - const gchar *name, - const gchar *summary, - const gchar *icon); -gboolean pk_backend_repo_list_changed (PkBackend *backend); + gboolean pk_backend_finished(PkBackend *backend); + gboolean pk_backend_package(PkBackend *backend, + PkInfoEnum info, + const gchar *package_id, + const gchar *summary); + gboolean pk_backend_repo_detail(PkBackend *backend, + const gchar *repo_id, + const gchar *description, + gboolean enabled); + gboolean pk_backend_update_detail(PkBackend *backend, + const gchar *package_id, + const gchar *updates, + const gchar *obsoletes, + const gchar *vendor_url, + const gchar *bugzilla_url, + const gchar *cve_url, + PkRestartEnum restart, + const gchar *update_text, + const gchar *changelog, + PkUpdateStateEnum state, + const gchar *issued, + const gchar *updated); + gboolean pk_backend_require_restart(PkBackend *backend, + PkRestartEnum restart, + const gchar *package_id); + gboolean pk_backend_message(PkBackend *backend, + PkMessageEnum message, + const gchar *details,...); + gboolean pk_backend_details(PkBackend *backend, + const gchar *package_id, + const gchar *license, + PkGroupEnum group, + const gchar *description, + const gchar *url, + gulong size); + gboolean pk_backend_files(PkBackend *backend, + const gchar *package_id, + const gchar *filelist); + gboolean pk_backend_distro_upgrade(PkBackend *backend, + PkDistroUpgradeEnum type, + const gchar *name, + const gchar *summary); + gboolean pk_backend_error_code(PkBackend *backend, + PkErrorEnum code, + const gchar *details,...); + gboolean pk_backend_repo_signature_required(PkBackend *backend, + const gchar *package_id, *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 11:06:22 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 15238B19 for ; Sun, 8 Sep 2013 11:06:22 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 018252835 for ; Sun, 8 Sep 2013 11:06:22 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88B6Lpj002061 for ; Sun, 8 Sep 2013 11:06:21 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88B6LdU002030 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 11:06:21 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 11:06:21 GMT Message-Id: <201309081106.r88B6LdU002030@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257114 - soc2013/mattbw/backend/query MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 11:06:22 -0000 Author: mattbw Date: Sun Sep 8 11:06:21 2013 New Revision: 257114 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257114 Log: Indent the query files too. Modified: soc2013/mattbw/backend/query/check_test.c soc2013/mattbw/backend/query/depends.c soc2013/mattbw/backend/query/depends.h soc2013/mattbw/backend/query/do.c soc2013/mattbw/backend/query/do.h soc2013/mattbw/backend/query/find.c soc2013/mattbw/backend/query/id.c soc2013/mattbw/backend/query/id.h soc2013/mattbw/backend/query/id_test.c soc2013/mattbw/backend/query/match.c soc2013/mattbw/backend/query/packages.c Modified: soc2013/mattbw/backend/query/check_test.c ============================================================================== --- soc2013/mattbw/backend/query/check_test.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/check_test.c Sun Sep 8 11:06:21 2013 (r257114) @@ -38,7 +38,7 @@ ATF_TC_BODY(package_match_name_only, tc) { struct pkg *pkg; - struct query_id id; + struct query_id id; pkg = gen_pkg(PKG_REMOTE); ATF_REQUIRE(pkg != NULL); @@ -63,7 +63,7 @@ ATF_TC_BODY(package_match_namever_only, tc) { struct pkg *pkg; - struct query_id id; + struct query_id id; pkg = gen_pkg(PKG_REMOTE); ATF_REQUIRE(pkg != NULL); @@ -88,7 +88,7 @@ ATF_TC_BODY(package_match_full, tc) { struct pkg *pkg; - struct query_id id; + struct query_id id; pkg = gen_pkg(PKG_REMOTE); ATF_REQUIRE(pkg != NULL); @@ -123,7 +123,7 @@ ATF_TC_BODY(package_match_bad_namever, tc) { struct pkg *pkg; - struct query_id id; + struct query_id id; pkg = gen_pkg(PKG_REMOTE); ATF_REQUIRE(pkg != NULL); @@ -150,7 +150,7 @@ ATF_TC_BODY(package_match_bad_arch, tc) { struct pkg *pkg; - struct query_id id; + struct query_id id; pkg = gen_pkg(PKG_REMOTE); ATF_REQUIRE(pkg != NULL); @@ -177,7 +177,7 @@ ATF_TC_BODY(package_match_bad_repo, tc) { struct pkg *pkg; - struct query_id id; + struct query_id id; pkg = gen_pkg(PKG_REMOTE); ATF_REQUIRE(pkg != NULL); @@ -204,7 +204,7 @@ ATF_TC_BODY(package_match_full_installed, tc) { struct pkg *pkg; - struct query_id id; + struct query_id id; pkg = gen_pkg(PKG_INSTALLED); ATF_REQUIRE(pkg != NULL); @@ -229,31 +229,23 @@ * This test condition is commented out because it triggers an assertion * failure instead of failing normally. */ -/*ATF_TC(package_match_no_namever); -ATF_TC_HEAD(package_match_no_namever, tc) -{ - - atf_tc_set_md_var(tc, "descr", - "Ensure packages fail to match IDs with a missing namever."); -} -ATF_TC_BODY(package_match_no_namever, tc) -{ - struct pkg *pkg; - struct query_id id; - - pkg = gen_pkg(PKG_REMOTE); - ATF_REQUIRE(pkg != NULL); - - id.namever = NULL; - id.arch = strdup("freebsd:10:x86:32"); - id.repo = strdup("arch"); - - ATF_CHECK(!query_check_package(pkg, &id)); - - pkg_free(pkg); - free(id.arch); - free(id.repo); -}*/ +/* + * ATF_TC(package_match_no_namever); ATF_TC_HEAD(package_match_no_namever, + * tc) { + * + * atf_tc_set_md_var(tc, "descr", "Ensure packages fail to match IDs with a + * missing namever."); } ATF_TC_BODY(package_match_no_namever, tc) { struct + * pkg *pkg; struct query_id id; + * + * pkg = gen_pkg(PKG_REMOTE); ATF_REQUIRE(pkg != NULL); + * + * id.namever = NULL; id.arch = strdup("freebsd:10:x86:32"); id.repo = + * strdup("arch"); + * + * ATF_CHECK(!query_check_package(pkg, &id)); + * + * pkg_free(pkg); free(id.arch); free(id.repo); } + */ /* @@ -269,7 +261,7 @@ ATF_TP_ADD_TC(tp, package_match_bad_arch); ATF_TP_ADD_TC(tp, package_match_bad_repo); ATF_TP_ADD_TC(tp, package_match_full_installed); - /*ATF_TP_ADD_TC(tp, package_match_no_namever);*/ + /* ATF_TP_ADD_TC(tp, package_match_no_namever); */ return atf_no_error(); } Modified: soc2013/mattbw/backend/query/depends.c ============================================================================== --- soc2013/mattbw/backend/query/depends.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/depends.c Sun Sep 8 11:06:21 2013 (r257114) @@ -30,10 +30,10 @@ #include "id.h" /* query_id, query_id_... */ #include "match.h" /* query_match_... */ -static bool emit_dependency(struct pkg_dep *dep, PkBackend *backend, struct pkgdb *db, unsigned int load_flags); -static bool emit_found_dependency(PkBackend *backend, struct pkg *package); -static bool emit_missing_dependency(PkBackend *backend, gchar *package_id); -static gchar *dep_to_package_id(struct pkg_dep *dep); +static bool emit_dependency(struct pkg_dep *dep, PkBackend *backend, struct pkgdb *db, unsigned int load_flags); +static bool emit_found_dependency(PkBackend *backend, struct pkg *package); +static bool emit_missing_dependency(PkBackend *backend, gchar *package_id); +static gchar *dep_to_package_id(struct pkg_dep *dep); static struct pkg *id_to_package(gchar *package_id, struct pkgdb *db, unsigned int load_flags); bool @@ -65,14 +65,13 @@ unsigned int load_flags) { bool success; - gchar *package_id; + gchar *package_id; struct pkg *package; package_id = dep_to_package_id(dep); /* - * Does this dependency correspond to a package in our - * database? + * Does this dependency correspond to a package in our database? */ package = id_to_package(package_id, db, load_flags); @@ -112,7 +111,7 @@ id_to_package(gchar *package_id, struct pkgdb *db, unsigned int load_flags) { struct pkg *package; - struct query_id query_id; + struct query_id query_id; assert(package_id != NULL); assert(db != NULL); @@ -120,23 +119,22 @@ package = NULL; if (package_id != NULL) { - bool success; + bool success; success = query_id_from_package_id(package_id, &query_id); if (success) { package = query_match_id(&query_id, db, load_flags); } } - return package; } /* * Converts a pkg_dep into a (partial) package ID. - * + * * The result may be NULL and should be freed using g_free. */ -static gchar * +static gchar * dep_to_package_id(struct pkg_dep *dep) { const char *name; @@ -149,4 +147,3 @@ return pk_package_id_build(name, version, "", ""); } - Modified: soc2013/mattbw/backend/query/depends.h ============================================================================== --- soc2013/mattbw/backend/query/depends.h Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/depends.h Sun Sep 8 11:06:21 2013 (r257114) @@ -25,9 +25,8 @@ #include "../pk-backend.h" /* Pk... */ -typedef int (*depends_get_ptr) (const struct pkg *pkg, struct pkg_dep **dep); +typedef int (*depends_get_ptr) (const struct pkg *pkg, struct pkg_dep **dep); bool query_depends_emit(PkBackend *backend, struct pkg *pkg, depends_get_ptr get, struct pkgdb *db, unsigned int load_flags); -#endif /*_PKGNG_BACKEND_QUERY_DEPENDS_H_*/ - +#endif /* _PKGNG_BACKEND_QUERY_DEPENDS_H_ */ Modified: soc2013/mattbw/backend/query/do.c ============================================================================== --- soc2013/mattbw/backend/query/do.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/do.c Sun Sep 8 11:06:21 2013 (r257114) @@ -31,16 +31,16 @@ #include "match.h" /* query_match_... */ #include "packages.h" /* query_packages_... */ -typedef struct query_id * (*query_id_func_ptr) (gchar **strings, guint count); +typedef struct query_id *(*query_id_func_ptr) (gchar **strings, guint count); -static bool emit_packages(PkBackend *backend, struct pkgdb *db, emit_ptr emitter, struct pkg **packages, unsigned int count); -static bool query_do_from_backend(PkBackend *backend, unsigned int load_flags, emit_ptr emitter, query_id_func_ptr to_query_ids); -static bool query_with_db(struct pkgdb *db, PkBackend *backend, unsigned int load_flags, emit_ptr emitter, query_id_func_ptr to_query_ids); +static bool emit_packages(PkBackend *backend, struct pkgdb *db, emit_ptr emitter, struct pkg **packages, unsigned int count); +static bool query_do_from_backend(PkBackend *backend, unsigned int load_flags, emit_ptr emitter, query_id_func_ptr to_query_ids); +static bool query_with_db(struct pkgdb *db, PkBackend *backend, unsigned int load_flags, emit_ptr emitter, query_id_func_ptr to_query_ids); /* * Runs a query over the PackageIDs selected in the backend that sends the * first match to an emitting function. - * + * * This is a wrapper over several lower level query functions. */ bool @@ -59,7 +59,7 @@ /* * Runs a query over the package names selected in the backend that sends the * first match to an emitting function. - * + * * This is a wrapper over several lower level query functions. */ bool @@ -120,12 +120,10 @@ if (query_ids != NULL) { packages = query_match_ids(query_ids, count, db, load_flags); } - if (packages != NULL) { success = emit_packages(backend, db, emitter, packages, count); query_packages_array_free(&packages, count); } - query_id_array_free(&query_ids, count); return success; Modified: soc2013/mattbw/backend/query/do.h ============================================================================== --- soc2013/mattbw/backend/query/do.h Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/do.h Sun Sep 8 11:06:21 2013 (r257114) @@ -24,7 +24,7 @@ #include #include "../pk-backend.h" -typedef bool (*emit_ptr) (PkBackend *backend, struct pkgdb *db, struct pkg *pkg); +typedef bool (*emit_ptr) (PkBackend *backend, struct pkgdb *db, struct pkg *pkg); bool query_do_from_backend_ids(PkBackend *backend, unsigned int load_flags, emit_ptr emitter); bool query_do_from_backend_names(PkBackend *backend, unsigned int load_flags, emit_ptr emitter); Modified: soc2013/mattbw/backend/query/find.c ============================================================================== --- soc2013/mattbw/backend/query/find.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/find.c Sun Sep 8 11:06:21 2013 (r257114) @@ -28,7 +28,7 @@ #include "find.h" /* query_find_... */ #include "id.h" /* struct query_id */ -static bool can_remote_iterate(struct query_id *query_id, unsigned int load_flags); +static bool can_remote_iterate(struct query_id *query_id, unsigned int load_flags); struct pkgdb_it * query_find_local(struct query_id *query_id, struct pkgdb *db, @@ -60,7 +60,6 @@ pkgdb_it_free(iterator); iterator = NULL; } - return iterator; } Modified: soc2013/mattbw/backend/query/id.c ============================================================================== --- soc2013/mattbw/backend/query/id.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/id.c Sun Sep 8 11:06:21 2013 (r257114) @@ -27,7 +27,7 @@ #include "../namever.h" /* namever_... */ -typedef bool (*id_from_string_ptr) (const char *, struct query_id *); +typedef bool (*id_from_string_ptr) (const char *, struct query_id *); static char *strdup_null_if_empty(const char *in); static struct query_id *query_id_array_alloc(unsigned int count); @@ -84,13 +84,12 @@ query_id_array_free(&query_ids, package_count); } } - return query_ids; } /* - * Converts a package name or name-version string to a query ID. - * Overwrites the contents of *query_id with said ID. + * Converts a package name or name-version string to a query ID. Overwrites + * the contents of *query_id with said ID. */ bool query_id_from_name(const char *name, struct query_id *query_id) @@ -107,14 +106,14 @@ } /* - * Converts a PackageKit package ID to a query ID. - * Overwrites the contents of *query_id with said ID. + * Converts a PackageKit package ID to a query ID. Overwrites the contents of + * *query_id with said ID. */ bool query_id_from_package_id(const gchar *package_id, struct query_id *query_id) { bool success; - gchar **split_package_id; + gchar **split_package_id; assert(package_id != NULL); assert(query_id != NULL); @@ -125,10 +124,10 @@ if (split_package_id != NULL) { bool have_name; bool have_version; - gchar *name; - gchar *version; - gchar *arch; - gchar *repo; + gchar *name; + gchar *version; + gchar *arch; + gchar *repo; /* We're not allowed to have an empty name or version. */ @@ -139,8 +138,8 @@ have_version = (version != NULL && version[0] != '\0'); /* - * Names and versions are mandatory. - * Anything else is optional. + * Names and versions are mandatory. Anything else is + * optional. */ if (have_name && have_version) { query_id->namever = namever_from_name_and_version(name, @@ -154,10 +153,8 @@ success = true; } - g_strfreev(split_package_id); } - return success; } @@ -173,7 +170,7 @@ * Returns NULL if the given string is NULL or empty, and a duplicate of the * string otherwise. */ -static char * +static char * strdup_null_if_empty(const char *in) { @@ -204,7 +201,6 @@ free(*query_ids_p); *query_ids_p = NULL; } - assert(*query_ids_p == NULL); } Modified: soc2013/mattbw/backend/query/id.h ============================================================================== --- soc2013/mattbw/backend/query/id.h Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/id.h Sun Sep 8 11:06:21 2013 (r257114) @@ -26,13 +26,13 @@ #include "pkg.h" struct query_id { - char *namever; - char *arch; - char *repo; + char *namever; + char *arch; + char *repo; }; bool query_id_from_name(const char *name, struct query_id *query_id); -bool query_id_from_package_id(const gchar *package_id, struct query_id *query_id); +bool query_id_from_package_id(const gchar *package_id, struct query_id *query_id); struct query_id *query_id_array_from_names(gchar **package_names, unsigned int package_count); struct query_id *query_id_array_from_package_ids(gchar **package_ids, unsigned int package_count); void query_id_array_free(struct query_id **query_ids_p, unsigned int count); Modified: soc2013/mattbw/backend/query/id_test.c ============================================================================== --- soc2013/mattbw/backend/query/id_test.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/id_test.c Sun Sep 8 11:06:21 2013 (r257114) @@ -239,8 +239,8 @@ ATF_TC_BODY(query_id_from_name_multiple_valid, tc) { unsigned int i; - struct query_id *results; - char *valid_names[3]; + struct query_id *results; + char *valid_names[3]; const char *valid_1 = "pkg-1.1.4"; const char *valid_2 = "brasero-1.2"; const char *valid_3 = "PackageKit"; @@ -261,7 +261,6 @@ free(results[i].namever); } } - free(valid_names[0]); free(valid_names[1]); free(valid_names[2]); @@ -276,8 +275,8 @@ } ATF_TC_BODY(query_id_from_name_multiple_empty, tc) { - struct query_id *results; - char *invalid_names[3]; + struct query_id *results; + char *invalid_names[3]; const char *invalid_1 = "pkg-1.1.4"; const char *invalid_2 = ""; const char *invalid_3 = "PackageKit"; @@ -303,8 +302,8 @@ } ATF_TC_BODY(query_id_from_package_id_multiple_valid, tc) { - struct query_id *results; - char *valid_package_ids[3]; + struct query_id *results; + char *valid_package_ids[3]; const char *valid_1 = "pkg;1.1.4;freebsd:9:x86:32;packagesite"; const char *valid_2 = "brasero;1.2;freebsd:9:x86:64;elsewhere"; const char *valid_3 = "PackageKit;0.6;freebsd:10:x86:32;installed"; @@ -329,7 +328,6 @@ ATF_CHECK_STREQ(results[2].arch, "freebsd:10:x86:32"); ATF_CHECK_STREQ(results[2].repo, "installed"); } - free(valid_package_ids[0]); free(valid_package_ids[1]); free(valid_package_ids[2]); Modified: soc2013/mattbw/backend/query/match.c ============================================================================== --- soc2013/mattbw/backend/query/match.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/match.c Sun Sep 8 11:06:21 2013 (r257114) @@ -33,12 +33,12 @@ /* Attempts to match a set of QueryIDs into packages. */ -typedef struct pkgdb_it * (*query_func_ptr) (struct query_id *id, struct pkgdb *db, unsigned int load_flags); +typedef struct pkgdb_it *(*query_func_ptr) (struct query_id *id, struct pkgdb *db, unsigned int load_flags); static struct pkg *query_match_from(query_func_ptr function, struct pkgdb *db, struct query_id *query_id, unsigned int load_flags); static struct pkg *match_iterator(struct pkgdb_it *it, struct query_id *query_id, unsigned int load_flags); -struct pkg ** +struct pkg ** query_match_ids(struct query_id *query_ids, unsigned int count, struct pkgdb *db, unsigned int load_flags) { @@ -55,12 +55,11 @@ for (i = 0; i < count; i++) { if (!success) { /* - * Catch both the packages being NULL and any failures - * below. + * Catch both the packages being NULL and any + * failures below. */ break; } - packages[i] = query_match_id(query_ids + i, db, load_flags); success = (packages[i] != NULL); } @@ -68,14 +67,13 @@ if (!success) { query_packages_array_free(&packages, count); } - return packages; } /* * Takes a QueryID and attempts to retrieve its corresponding package. */ -struct pkg * +struct pkg * query_match_id(struct query_id *query_id, struct pkgdb *db, unsigned int load_flags) { bool try_local; @@ -102,7 +100,6 @@ if (package == NULL && try_remote) { package = query_match_from(query_find_remote, db, query_id, load_flags); } - return package; } @@ -125,7 +122,6 @@ result = match_iterator(iterator, query_id, load_flags); pkgdb_it_free(iterator); } - return result; } @@ -157,10 +153,9 @@ pkg_free(pkg); pkg = NULL; } - /* Package if and only if success. */ - assert (pkg != NULL || !success); - assert (pkg == NULL || success); + assert(pkg != NULL || !success); + assert(pkg == NULL || success); return pkg; } Modified: soc2013/mattbw/backend/query/packages.c ============================================================================== --- soc2013/mattbw/backend/query/packages.c Sun Sep 8 11:03:24 2013 (r257113) +++ soc2013/mattbw/backend/query/packages.c Sun Sep 8 11:06:21 2013 (r257114) @@ -25,7 +25,7 @@ #include "packages.h" /* query_packages_... */ /* Allocates an array of size 'package_count' of null pointers to packages. */ -struct pkg ** +struct pkg ** query_packages_array_alloc(unsigned int package_count) { From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 11:08:34 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A7F48B40 for ; Sun, 8 Sep 2013 11:08:34 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 86C042841 for ; Sun, 8 Sep 2013 11:08:34 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88B8YS5027517 for ; Sun, 8 Sep 2013 11:08:34 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88B8YPd027502 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 11:08:34 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 11:08:34 GMT Message-Id: <201309081108.r88B8YPd027502@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257115 - soc2013/mattbw/backend/jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 11:08:34 -0000 Author: mattbw Date: Sun Sep 8 11:08:34 2013 New Revision: 257115 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257115 Log: And also indent jobs. Modified: soc2013/mattbw/backend/jobs/check_test.c soc2013/mattbw/backend/jobs/core.c soc2013/mattbw/backend/jobs/core.h soc2013/mattbw/backend/jobs/do.c soc2013/mattbw/backend/jobs/do.h Modified: soc2013/mattbw/backend/jobs/check_test.c ============================================================================== --- soc2013/mattbw/backend/jobs/check_test.c Sun Sep 8 11:06:21 2013 (r257114) +++ soc2013/mattbw/backend/jobs/check_test.c Sun Sep 8 11:08:34 2013 (r257115) @@ -38,7 +38,7 @@ ATF_TC_BODY(check_id_on_package_no_match, tc) { struct pkg *package; - struct query_id id; + struct query_id id; package = gen_pkg(PKG_REMOTE); ATF_REQUIRE(package != NULL); @@ -65,7 +65,7 @@ ATF_TC_BODY(check_id_on_package_partial_match, tc) { struct pkg *package; - struct query_id id; + struct query_id id; package = gen_pkg(PKG_REMOTE); ATF_REQUIRE(package != NULL); @@ -100,7 +100,7 @@ ATF_TC_BODY(check_id_on_package_full_match, tc) { struct pkg *package; - struct query_id id; + struct query_id id; package = gen_pkg(PKG_REMOTE); ATF_REQUIRE(package != NULL); Modified: soc2013/mattbw/backend/jobs/core.c ============================================================================== --- soc2013/mattbw/backend/jobs/core.c Sun Sep 8 11:06:21 2013 (r257114) +++ soc2013/mattbw/backend/jobs/core.c Sun Sep 8 11:08:34 2013 (r257115) @@ -41,14 +41,14 @@ "This shouldn't occur and is a bug.", /* EPKG_OK */ "This shouldn't occur and is a bug.", /* EPKG_END */ "This shouldn't occur and is a bug.", /* EPKG_WARN */ - "Fatal error.", /* EPKG_FATAL */ + "Fatal error.", /* EPKG_FATAL */ "Package required by another package.", /* EPKG_REQUIRED */ - "Already installed.", /* EPKG_INSTALLED */ - "Unresolved dependencies.", /* EPKG_DEPENDENCY */ + "Already installed.", /* EPKG_INSTALLED */ + "Unresolved dependencies.", /* EPKG_DEPENDENCY */ "A package is currently locked.", /* EPKG_LOCKED */ "No usable database available.", /* EPKG_ENODB */ "Local file newer than remote file.", /* EPKG_UPTODATE */ - "Unknown keyword.", /* EPKG_UNKNOWN */ + "Unknown keyword.", /* EPKG_UNKNOWN */ "Incompatible repo schema version", /* EPKG_REPOSCHEMA */ "Insufficient privilege for action.", /* EPKG_ENOACCESS */ "Insecure privileges on DB file." /* EPKG_INSECURE */ @@ -82,7 +82,6 @@ ERR(backend, job_failed, error_string); } - return (err == EPKG_OK); } @@ -90,7 +89,7 @@ jobs_set_repo(struct pkg_jobs *jobs, const char *reponame) { bool success; - enum repo_type type; + enum repo_type type; assert(jobs != NULL); @@ -106,18 +105,18 @@ pkg_repo_ident_from_name(reponame)); success = (err == EPKG_OK); } - return success; } -/* Adds each PackageID into an already created job. Returns NULL on failure - * and a vector of added package name-versions to be freed after solution - * on success. +/* + * Adds each PackageID into an already created job. Returns NULL on failure + * and a vector of added package name-versions to be freed after solution on + * success. */ -char ** +char ** jobs_add_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count) { - char **namevers; + char **namevers; assert(jobs != NULL); assert(package_ids != NULL); @@ -134,7 +133,6 @@ namever_array_free(&namevers, count); } } - return namevers; } @@ -170,7 +168,6 @@ if (err != EPKG_OK && jobs != NULL) { jobs_free(&jobs); } - assert(err == EPKG_OK || jobs == NULL); assert(err != EPKG_OK || jobs != NULL); Modified: soc2013/mattbw/backend/jobs/core.h ============================================================================== --- soc2013/mattbw/backend/jobs/core.h Sun Sep 8 11:06:21 2013 (r257114) +++ soc2013/mattbw/backend/jobs/core.h Sun Sep 8 11:08:34 2013 (r257115) @@ -24,13 +24,13 @@ #include /* bool */ #include "../pk-backend.h" /* PkBackend */ -typedef PkInfoEnum (*pkg_info_ptr) (struct pkg *pkg); +typedef PkInfoEnum(*pkg_info_ptr) (struct pkg *pkg); bool jobs_apply(struct pkg_jobs *jobs, PkBackend *backend, PkErrorEnum jobs_failed); bool jobs_set_repo(struct pkg_jobs *jobs, const char *reponame); -char **jobs_add_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count); +char **jobs_add_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count); struct pkg_jobs *jobs_allocate(pkg_jobs_t type, struct pkgdb *db); void jobs_emit_packages(struct pkg_jobs *jobs, PkBackend *backend, pkg_info_ptr info); -void jobs_free(struct pkg_jobs **jobs_p); +void jobs_free (struct pkg_jobs **jobs_p); #endif /* !_PKGNG_BACKEND_JOBS_CORE_H_ */ Modified: soc2013/mattbw/backend/jobs/do.c ============================================================================== --- soc2013/mattbw/backend/jobs/do.c Sun Sep 8 11:06:21 2013 (r257114) +++ soc2013/mattbw/backend/jobs/do.c Sun Sep 8 11:08:34 2013 (r257115) @@ -34,14 +34,14 @@ #include "core.h" /* jobs_... */ #include "do.h" /* jobs_do_... */ -static bool jobs_do_apply(const struct jobs_spec *spec, struct pkg_jobs *jobs); -static bool jobs_do_check(const struct jobs_spec *spec, struct pkg_jobs *jobs, gchar **package_ids, guint count); -static bool jobs_do_count(const struct jobs_spec *spec, struct pkg_jobs *jobs); -static bool jobs_do_multiple_repos(struct pkgdb *db, const struct jobs_spec *spec, gchar **package_ids, guint count); -static bool jobs_do_same_repo(struct pkgdb *db, const struct jobs_spec *spec, gchar **package_ids, guint count, const char *reponame); -static bool jobs_do_set_repo(const struct jobs_spec *spec, struct pkg_jobs *jobs, const char *reponame); -static bool jobs_do_solve(const struct jobs_spec *spec, struct pkg_jobs *jobs); -static char **jobs_do_populate(const struct jobs_spec *spec, struct pkg_jobs *jobs, gchar **package_ids, guint count); +static bool jobs_do_apply(const struct jobs_spec *spec, struct pkg_jobs *jobs); +static bool jobs_do_check(const struct jobs_spec *spec, struct pkg_jobs *jobs, gchar **package_ids, guint count); +static bool jobs_do_count(const struct jobs_spec *spec, struct pkg_jobs *jobs); +static bool jobs_do_multiple_repos(struct pkgdb *db, const struct jobs_spec *spec, gchar **package_ids, guint count); +static bool jobs_do_same_repo(struct pkgdb *db, const struct jobs_spec *spec, gchar **package_ids, guint count, const char *reponame); +static bool jobs_do_set_repo(const struct jobs_spec *spec, struct pkg_jobs *jobs, const char *reponame); +static bool jobs_do_solve(const struct jobs_spec *spec, struct pkg_jobs *jobs); +static char **jobs_do_populate(const struct jobs_spec *spec, struct pkg_jobs *jobs, gchar **package_ids, guint count); static struct pkg_jobs *jobs_do_allocate(const struct jobs_spec *spec, struct pkgdb *db); static struct pkg_jobs *jobs_do_initialise(const struct jobs_spec *spec, struct pkgdb *db, const char *reponame); @@ -62,7 +62,7 @@ if (db != NULL) { if (spec->use_package_ids) { guint count; - gchar **package_ids; + gchar **package_ids; package_ids = get_package_ids(spec->backend, &count); assert(package_ids != NULL); @@ -75,7 +75,6 @@ pkgdb_close(db); } - return success; } @@ -118,8 +117,8 @@ count, spec->reject_non_updates); } if (failed_package != NULL) { - char *message; - char *package_id; + char *message; + char *package_id; package_id = pkgutils_pkg_to_id(failed_package); message = NULL; @@ -133,7 +132,6 @@ g_free(package_id); free(message); } - assert(0 < count || failed_package == NULL); return (failed_package == NULL); @@ -151,7 +149,6 @@ if (count == 0) { ERR(spec->backend, spec->no_jobs_error, "nothing to do"); } - return (0 < count); } @@ -164,16 +161,16 @@ { bool success; unsigned int i; - char *repo; - gchar **splits; + char *repo; + gchar **splits; - /* + /* * HACK ALERT - * - * We'd ideally like to do one job for all PackageIDs but, because - * there could be more than one repo being used (as each PackageID has - * its own repo), we need to do one job per PackageID. - * TODO: consider bundling PackageIDs up into separate jobs per repo? + * + * We'd ideally like to do one job for all PackageIDs but, because there + * could be more than one repo being used (as each PackageID has its + * own repo), we need to do one job per PackageID. TODO: consider + * bundling PackageIDs up into separate jobs per repo? */ success = true; for (i = 0; i < count; i++) { @@ -221,7 +218,7 @@ bool populated; bool solved; bool valid; - char **namevers; + char **namevers; solved = has_actions = valid = false; @@ -240,11 +237,9 @@ if (populated && solved && has_actions && valid) { success = jobs_do_apply(spec, jobs); } - pkg_jobs_free(jobs); namever_array_free(&namevers, count); } - return success; } @@ -260,17 +255,16 @@ success = jobs_set_repo(jobs, reponame); if (!success) { - char *err_message; + char *err_message; (void)asprintf(&err_message, "Could not set job repository to '%s'.", reponame); - ERR(spec->backend, + ERR(spec->backend, PK_ERROR_ENUM_REPO_NOT_FOUND, err_message); - free(err_message); + free(err_message); } - return success; } @@ -288,15 +282,14 @@ PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "could not solve the job"); } - return solved; } -static char ** +static char ** jobs_do_populate(const struct jobs_spec *spec, struct pkg_jobs *jobs, gchar **package_ids, guint count) { - char **namevers; + char **namevers; assert(spec != NULL); assert(jobs != NULL); @@ -314,7 +307,6 @@ "could not find all requested packages"); } } - assert(count >= 1 || namevers == NULL); return namevers; @@ -334,7 +326,6 @@ PK_ERROR_ENUM_INTERNAL_ERROR, "could not init pkg_jobs"); } - return jobs; } @@ -357,6 +348,5 @@ jobs_free(&jobs); } } - return jobs; } Modified: soc2013/mattbw/backend/jobs/do.h ============================================================================== --- soc2013/mattbw/backend/jobs/do.h Sun Sep 8 11:06:21 2013 (r257114) +++ soc2013/mattbw/backend/jobs/do.h Sun Sep 8 11:08:34 2013 (r257115) @@ -36,9 +36,9 @@ bool reject_non_updates; bool simulate; bool use_package_ids; - bool ignore; /* Alignment */ + bool ignore; /* Alignment */ }; -bool jobs_do(const struct jobs_spec *spec); +bool jobs_do (const struct jobs_spec *spec); #endif /* !_PKGNG_BACKEND_JOBS_DO_H */ From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 11:20:45 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 527EBDD7 for ; Sun, 8 Sep 2013 11:20:45 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 3FD2328D4 for ; Sun, 8 Sep 2013 11:20:45 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88BKjVw074034 for ; Sun, 8 Sep 2013 11:20:45 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88BKj8w074013 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 11:20:45 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 11:20:45 GMT Message-Id: <201309081120.r88BKj8w074013@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257116 - soc2013/mattbw/backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 11:20:45 -0000 Author: mattbw Date: Sun Sep 8 11:20:44 2013 New Revision: 257116 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257116 Log: Add some more pkgutils test cases. These test the package emission state enum deciding logic. Modified: soc2013/mattbw/backend/Makefile soc2013/mattbw/backend/pkgutils_test.c Modified: soc2013/mattbw/backend/Makefile ============================================================================== --- soc2013/mattbw/backend/Makefile Sun Sep 8 11:08:34 2013 (r257115) +++ soc2013/mattbw/backend/Makefile Sun Sep 8 11:20:44 2013 (r257116) @@ -125,7 +125,7 @@ pkgutils_test: pkgutils_test.o pkgutils.o namever.o testutils.o repo.o ${CC} ${LDFLAGS} ${TESTLDFLAGS} -o ${.TARGET} ${.ALLSRC} ${LIBS} ${TESTLIBS} -pkgutils_test.o: pkgutils_test.c repo.o +pkgutils_test.o: pkgutils_test.c ${CC} ${CFLAGS} ${TESTCFLAGS} -o ${.TARGET} -c ${.ALLSRC} namever_test: namever_test.o namever.o testutils.o Modified: soc2013/mattbw/backend/pkgutils_test.c ============================================================================== --- soc2013/mattbw/backend/pkgutils_test.c Sun Sep 8 11:08:34 2013 (r257115) +++ soc2013/mattbw/backend/pkgutils_test.c Sun Sep 8 11:20:44 2013 (r257116) @@ -93,6 +93,91 @@ g_free(package_id); } +ATF_TC(pkg_install_state); +ATF_TC_HEAD(pkg_install_state, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "Test 'pkgutils_pkg_install_state'."); +} +ATF_TC_BODY(pkg_install_state, tc) +{ + struct pkg *package; + + package = gen_pkg(PKG_REMOTE); + ATF_REQUIRE(package != NULL); + + /* Old version newer -> downgrading */ + pkg_set(package, PKG_OLD_VERSION, "1.2.3"); + ATF_CHECK_EQ(pkgutils_pkg_install_state(package), + PK_INFO_ENUM_DOWNGRADING); + + /* Old version the same -> reinstalling */ + pkg_set(package, PKG_OLD_VERSION, "1.1.4"); + ATF_CHECK_EQ(pkgutils_pkg_install_state(package), + PK_INFO_ENUM_REINSTALLING); + + /* Old version older -> updating */ + pkg_set(package, PKG_OLD_VERSION, "1.0.0"); + ATF_CHECK_EQ(pkgutils_pkg_install_state(package), + PK_INFO_ENUM_UPDATING); + + pkg_free(package); +} + +ATF_TC(pkg_current_state_local); +ATF_TC_HEAD(pkg_current_state_local, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "Test 'pkgutils_pkg_current_state' for installed packages."); +} +ATF_TC_BODY(pkg_current_state_local, tc) +{ + struct pkg *package; + + package = gen_pkg(PKG_INSTALLED); + ATF_REQUIRE(package != NULL); + + pkg_set(package, PKG_OLD_VERSION, "1.2.3"); + ATF_CHECK_EQ(pkgutils_pkg_current_state(package), + PK_INFO_ENUM_INSTALLED); + + pkg_free(package); +} + +ATF_TC(pkg_current_state_remote); +ATF_TC_HEAD(pkg_current_state_remote, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "Test 'pkgutils_pkg_current_state' for remote packages."); +} +ATF_TC_BODY(pkg_current_state_remote, tc) +{ + struct pkg *package; + + package = gen_pkg(PKG_REMOTE); + ATF_REQUIRE(package != NULL); + + /* Old version newer -> available */ + pkg_set(package, PKG_OLD_VERSION, "1.2.3"); + ATF_CHECK_EQ(pkgutils_pkg_current_state(package), + PK_INFO_ENUM_AVAILABLE); + + /* Old version the same -> installed */ + pkg_set(package, PKG_OLD_VERSION, "1.1.4"); + ATF_CHECK_EQ(pkgutils_pkg_current_state(package), + PK_INFO_ENUM_INSTALLED); + + /* Old version older -> available */ + pkg_set(package, PKG_OLD_VERSION, "1.0.0"); + ATF_CHECK_EQ(pkgutils_pkg_current_state(package), + PK_INFO_ENUM_AVAILABLE); + + pkg_free(package); +} + /* * TEST PACK */ @@ -102,6 +187,9 @@ ATF_TP_ADD_TC(tp, pkg_to_id_valid_local); ATF_TP_ADD_TC(tp, pkg_to_id_valid_installed); ATF_TP_ADD_TC(tp, pkg_to_id_valid_remote); + ATF_TP_ADD_TC(tp, pkg_install_state); + ATF_TP_ADD_TC(tp, pkg_current_state_local); + ATF_TP_ADD_TC(tp, pkg_current_state_remote); return atf_no_error(); } From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 11:30:15 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id F3761F75 for ; Sun, 8 Sep 2013 11:30:14 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D14722911 for ; Sun, 8 Sep 2013 11:30:14 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88BUE5j077217 for ; Sun, 8 Sep 2013 11:30:14 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88BUEBV077206 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 11:30:14 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 11:30:14 GMT Message-Id: <201309081130.r88BUEBV077206@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257117 - soc2013/mattbw/backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 11:30:15 -0000 Author: mattbw Date: Sun Sep 8 11:30:14 2013 New Revision: 257117 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257117 Log: Add new unit tests for pkgutils_pkg_matches_filters. These currently fail; will investigate now. Modified: soc2013/mattbw/backend/pkgutils_test.c Modified: soc2013/mattbw/backend/pkgutils_test.c ============================================================================== --- soc2013/mattbw/backend/pkgutils_test.c Sun Sep 8 11:20:44 2013 (r257116) +++ soc2013/mattbw/backend/pkgutils_test.c Sun Sep 8 11:30:14 2013 (r257117) @@ -178,6 +178,84 @@ pkg_free(package); } +ATF_TC(pkg_matches_filters_installed); +ATF_TC_HEAD(pkg_matches_filters_installed, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "Test 'pkgutils_pkg_matches_filters' for the installed filter."); +} +ATF_TC_BODY(pkg_matches_filters_installed, tc) +{ + struct pkg *local; + struct pkg *remote; + PkBitfield filter; + + filter = pk_bitfield_from_enums(PK_FILTER_ENUM_INSTALLED); + + /* Locally installed -> accept */ + local = gen_pkg(PKG_INSTALLED); + ATF_REQUIRE(local != NULL); + ATF_CHECK(pkgutils_pkg_matches_filters(local, filter)); + pkg_free(local); + + remote = gen_pkg(PKG_REMOTE); + ATF_REQUIRE(remote != NULL); + + /* Old version newer -> reject */ + pkg_set(remote, PKG_OLD_VERSION, "1.2.3"); + ATF_CHECK(!pkgutils_pkg_matches_filters(remote, filter)); + + /* Old version the same -> accept */ + pkg_set(remote, PKG_OLD_VERSION, "1.1.4"); + ATF_CHECK(pkgutils_pkg_matches_filters(remote, filter)); + + /* Old version older -> reject */ + pkg_set(remote, PKG_OLD_VERSION, "1.0.0"); + ATF_CHECK(!pkgutils_pkg_matches_filters(remote, filter)); + + pkg_free(remote); +} + +ATF_TC(pkg_matches_filters_not_installed); +ATF_TC_HEAD(pkg_matches_filters_not_installed, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "Test 'pkgutils_pkg_matches_filters' for the ~installed filter."); +} +ATF_TC_BODY(pkg_matches_filters_not_installed, tc) +{ + struct pkg *local; + struct pkg *remote; + PkBitfield filter; + + filter = pk_bitfield_from_enums(PK_FILTER_ENUM_NOT_INSTALLED); + + /* Locally installed -> reject */ + local = gen_pkg(PKG_INSTALLED); + ATF_REQUIRE(local != NULL); + ATF_CHECK(!pkgutils_pkg_matches_filters(local, filter)); + pkg_free(local); + + remote = gen_pkg(PKG_REMOTE); + ATF_REQUIRE(remote != NULL); + + /* Old version newer -> reject */ + pkg_set(remote, PKG_OLD_VERSION, "1.2.3"); + ATF_CHECK(pkgutils_pkg_matches_filters(remote, filter)); + + /* Old version the same -> accept */ + pkg_set(remote, PKG_OLD_VERSION, "1.1.4"); + ATF_CHECK(!pkgutils_pkg_matches_filters(remote, filter)); + + /* Old version older -> reject */ + pkg_set(remote, PKG_OLD_VERSION, "1.0.0"); + ATF_CHECK(pkgutils_pkg_matches_filters(remote, filter)); + + pkg_free(remote); +} + /* * TEST PACK */ @@ -190,6 +268,8 @@ ATF_TP_ADD_TC(tp, pkg_install_state); ATF_TP_ADD_TC(tp, pkg_current_state_local); ATF_TP_ADD_TC(tp, pkg_current_state_remote); + ATF_TP_ADD_TC(tp, pkg_matches_filters_installed); + ATF_TP_ADD_TC(tp, pkg_matches_filters_not_installed); return atf_no_error(); } From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 11:33:07 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 287B1FA1 for ; Sun, 8 Sep 2013 11:33:07 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 16718293F for ; Sun, 8 Sep 2013 11:33:07 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88BX6EV008601 for ; Sun, 8 Sep 2013 11:33:06 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88BX6FA008595 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 11:33:06 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 11:33:06 GMT Message-Id: <201309081133.r88BX6FA008595@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257118 - soc2013/mattbw/backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 11:33:07 -0000 Author: mattbw Date: Sun Sep 8 11:33:06 2013 New Revision: 257118 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257118 Log: Fixed previously failing test. The test case itself was incorrect - it wasn't calling pk_bitfield_from_enums properly. Modified: soc2013/mattbw/backend/pkgutils_test.c Modified: soc2013/mattbw/backend/pkgutils_test.c ============================================================================== --- soc2013/mattbw/backend/pkgutils_test.c Sun Sep 8 11:30:14 2013 (r257117) +++ soc2013/mattbw/backend/pkgutils_test.c Sun Sep 8 11:33:06 2013 (r257118) @@ -191,7 +191,7 @@ struct pkg *remote; PkBitfield filter; - filter = pk_bitfield_from_enums(PK_FILTER_ENUM_INSTALLED); + filter = pk_bitfield_from_enums(PK_FILTER_ENUM_INSTALLED, -1); /* Locally installed -> accept */ local = gen_pkg(PKG_INSTALLED); @@ -230,7 +230,7 @@ struct pkg *remote; PkBitfield filter; - filter = pk_bitfield_from_enums(PK_FILTER_ENUM_NOT_INSTALLED); + filter = pk_bitfield_from_enums(PK_FILTER_ENUM_NOT_INSTALLED, -1); /* Locally installed -> reject */ local = gen_pkg(PKG_INSTALLED); From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 12:30:31 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 38FD086F for ; Sun, 8 Sep 2013 12:30:31 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 184602B6C for ; Sun, 8 Sep 2013 12:30:31 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88CUUuW070289 for ; Sun, 8 Sep 2013 12:30:30 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88CUUE2070269 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 12:30:30 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 12:30:30 GMT Message-Id: <201309081230.r88CUUE2070269@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257121 - soc2013/mattbw/backend/actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 12:30:31 -0000 Author: mattbw Date: Sun Sep 8 12:30:30 2013 New Revision: 257121 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257121 Log: Only update repositories which are enabled. Modified: soc2013/mattbw/backend/actions/refresh_cache.c Modified: soc2013/mattbw/backend/actions/refresh_cache.c ============================================================================== --- soc2013/mattbw/backend/actions/refresh_cache.c Sun Sep 8 11:35:56 2013 (r257120) +++ soc2013/mattbw/backend/actions/refresh_cache.c Sun Sep 8 12:30:30 2013 (r257121) @@ -44,9 +44,10 @@ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include /* assert */ #include /* gboolean */ #include /* bool, true, false */ #include "../pk-backend.h" /* pk..., Pk... */ @@ -57,37 +58,65 @@ #include "../query.h" /* query_... */ #include "../utils.h" /* STATUS, ERR */ +static bool update_repo(struct pkg_repo *repo, bool force); + /* - * The thread that performs a RefreshCache operation. Should be invoked - * by the pk_backend_refresh_cache hook. + * The thread that performs a RefreshCache operation. Should be invoked by + * the pk_backend_refresh_cache hook. */ gboolean refresh_cache_thread(PkBackend *backend) { + bool success; gboolean force; - int err; struct pkg_repo *repo; - err = EPKG_FATAL; + assert(backend != NULL); STATUS(backend, PK_STATUS_ENUM_QUERY); force = pk_backend_get_bool(backend, "force"); repo = NULL; - while (pkg_repos(&repo) == EPKG_OK) { - err = pkg_update(repo, force); - /* Intentionally silence already-up-to-date errors. */ - if (err == EPKG_UPTODATE) - err = EPKG_OK; - else if (err != EPKG_OK) { - ERR(backend, - PK_ERROR_ENUM_REPO_NOT_AVAILABLE, - "could not update repo"); + success = true; + while (success) { + int err; + + err = pkg_repos(&repo); + if (err == EPKG_OK) { + success = update_repo(repo, force); + } else { + /* Did we run out of repos? */ + success = (err == EPKG_END); break; } } + if (!success) { + ERR(backend, + PK_ERROR_ENUM_REPO_NOT_AVAILABLE, + "Repository update failed."); + } pk_backend_finished(backend); - return (err == EPKG_OK) ? TRUE : FALSE; + return success ? TRUE : FALSE; +} + +static bool +update_repo(struct pkg_repo *repo, bool force) +{ + bool success; + + assert(repo != NULL); + + /* Claim success if we don't need to update the repo. */ + success = true; + + /* Don't update disabled repositories. */ + if (pkg_repo_enabled(repo)) { + int err; + + err = pkg_update(repo, force); + success = (err == EPKG_OK || err == EPKG_UPTODATE); + } + return success; } From owner-svn-soc-all@FreeBSD.ORG Sun Sep 8 13:01:04 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 2F28B215 for ; Sun, 8 Sep 2013 13:01:04 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0F41D2CB0 for ; Sun, 8 Sep 2013 13:01:04 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r88D13rY000694 for ; Sun, 8 Sep 2013 13:01:03 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r88D13ig000677 for svn-soc-all@FreeBSD.org; Sun, 8 Sep 2013 13:01:03 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 8 Sep 2013 13:01:03 GMT Message-Id: <201309081301.r88D13ig000677@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257122 - in soc2013/mattbw/backend: . jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Sep 2013 13:01:04 -0000 Author: mattbw Date: Sun Sep 8 13:01:03 2013 New Revision: 257122 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257122 Log: Fix breakage with valid repos being deemed invalid. Modified: soc2013/mattbw/backend/jobs/core.c soc2013/mattbw/backend/jobs/core.h soc2013/mattbw/backend/jobs/do.c soc2013/mattbw/backend/repo.c soc2013/mattbw/backend/repo.h Modified: soc2013/mattbw/backend/jobs/core.c ============================================================================== --- soc2013/mattbw/backend/jobs/core.c Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/jobs/core.c Sun Sep 8 13:01:03 2013 (r257122) @@ -85,27 +85,31 @@ return (err == EPKG_OK); } -bool +enum repo_set_status jobs_set_repo(struct pkg_jobs *jobs, const char *reponame) { - bool success; + enum repo_set_status status; enum repo_type type; assert(jobs != NULL); - success = true; - type = repo_type(reponame); if (type == REPO_INVALID) { - success = false; + status = REPO_SET_INVALID_REPO; + } else if (type == REPO_INVALID) { + status = REPO_SET_DISABLED_REPO; } else if (type == REPO_REMOTE) { int err; err = pkg_jobs_set_repository(jobs, pkg_repo_ident_from_name(reponame)); - success = (err == EPKG_OK); + status = (err == EPKG_OK) ? REPO_SET_OK : REPO_SET_FAILURE; + } else { + /* Ignore any other type of repository. */ + status = REPO_SET_OK; } - return success; + + return status; } /* @@ -136,6 +140,34 @@ return namevers; } +/* Converts a repo-set result to a string constant. */ +const char * +jobs_repo_set_status_to_string(enum repo_set_status status) +{ + const char *detail; + +#ifndef __clang__ + detail = "Detail message not set." +#endif + + switch (status) { + case REPO_SET_OK: + detail = "This shouldn't happen."; + break; + case REPO_SET_INVALID_REPO: + detail = "This repo doesn't seem to exist."; + break; + case REPO_SET_DISABLED_REPO: + detail = "This repo is disabled."; + break; + case REPO_SET_FAILURE: + detail = "Error while setting repo."; + break; + } + + return detail; +} + /* Emits each package queued up in a (solved) job. */ void jobs_emit_packages(struct pkg_jobs *jobs, PkBackend *backend, Modified: soc2013/mattbw/backend/jobs/core.h ============================================================================== --- soc2013/mattbw/backend/jobs/core.h Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/jobs/core.h Sun Sep 8 13:01:03 2013 (r257122) @@ -24,11 +24,19 @@ #include /* bool */ #include "../pk-backend.h" /* PkBackend */ +enum repo_set_status { + REPO_SET_OK, + REPO_SET_INVALID_REPO, + REPO_SET_DISABLED_REPO, + REPO_SET_FAILURE +}; + typedef PkInfoEnum(*pkg_info_ptr) (struct pkg *pkg); bool jobs_apply(struct pkg_jobs *jobs, PkBackend *backend, PkErrorEnum jobs_failed); -bool jobs_set_repo(struct pkg_jobs *jobs, const char *reponame); +enum repo_set_status jobs_set_repo(struct pkg_jobs *jobs, const char *reponame); char **jobs_add_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count); +const char *jobs_repo_set_status_to_string(enum repo_set_status status); struct pkg_jobs *jobs_allocate(pkg_jobs_t type, struct pkgdb *db); void jobs_emit_packages(struct pkg_jobs *jobs, PkBackend *backend, pkg_info_ptr info); void jobs_free (struct pkg_jobs **jobs_p); Modified: soc2013/mattbw/backend/jobs/do.c ============================================================================== --- soc2013/mattbw/backend/jobs/do.c Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/jobs/do.c Sun Sep 8 13:01:03 2013 (r257122) @@ -248,18 +248,23 @@ const char *reponame) { bool success; + enum repo_set_status status; assert(spec != NULL); assert(jobs != NULL); /* reponame can be NULL */ - success = jobs_set_repo(jobs, reponame); + status = jobs_set_repo(jobs, reponame); + success = (status == REPO_SET_OK); if (!success) { char *err_message; + const char *detail; + + detail = jobs_repo_set_status_to_string(status); (void)asprintf(&err_message, - "Could not set job repository to '%s'.", - reponame); + "Could not set job repository to '%s': %s", + reponame, detail); ERR(spec->backend, PK_ERROR_ENUM_REPO_NOT_FOUND, err_message); Modified: soc2013/mattbw/backend/repo.c ============================================================================== --- soc2013/mattbw/backend/repo.c Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/repo.c Sun Sep 8 13:01:03 2013 (r257122) @@ -45,9 +45,15 @@ type = repo_type_no_remote_check(name); - if (type == REPO_REMOTE && - (pkg_repo_find_ident(pkg_repo_ident_from_name(name)) != NULL)) { - type = REPO_INVALID; + if (type == REPO_REMOTE) { + struct pkg_repo *repo; + repo = pkg_repo_find_name(name); + + if (repo == NULL) { + type = REPO_INVALID; + } else if (!pkg_repo_enabled(repo)) { + type = REPO_DISABLED; + } } return type; } Modified: soc2013/mattbw/backend/repo.h ============================================================================== --- soc2013/mattbw/backend/repo.h Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/repo.h Sun Sep 8 13:01:03 2013 (r257122) @@ -27,7 +27,8 @@ REPO_INVALID, REPO_ANY, REPO_LOCAL, - REPO_REMOTE + REPO_REMOTE, + REPO_DISABLED }; enum repo_type repo_type(const char *name); From owner-svn-soc-all@FreeBSD.ORG Mon Sep 9 14:23:55 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 251597F9 for ; Mon, 9 Sep 2013 14:23:55 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1110F29F2 for ; Mon, 9 Sep 2013 14:23:55 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r89ENsr9004894 for ; Mon, 9 Sep 2013 14:23:54 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r89ENs3i004884 for svn-soc-all@FreeBSD.org; Mon, 9 Sep 2013 14:23:54 GMT (envelope-from zcore@FreeBSD.org) Date: Mon, 9 Sep 2013 14:23:54 GMT Message-Id: <201309091423.r89ENs3i004884@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257157 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Sep 2013 14:23:55 -0000 Author: zcore Date: Mon Sep 9 14:23:54 2013 New Revision: 257157 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257157 Log: add blockif_fsync and call it in handle_flush() path Modified: soc2013/zcore/head/usr.sbin/bhyve/block_if.c soc2013/zcore/head/usr.sbin/bhyve/block_if.h soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/block_if.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/block_if.c Mon Sep 9 13:56:58 2013 (r257156) +++ soc2013/zcore/head/usr.sbin/bhyve/block_if.c Mon Sep 9 14:23:54 2013 (r257157) @@ -335,6 +335,14 @@ return (0); } +int +blockif_fsync(struct blockif_ctxt *bc) +{ + + assert(bc->bc_magic == BLOCKIF_SIG); + return fsync(bc->bc_fd); +} + /* * Accessors */ Modified: soc2013/zcore/head/usr.sbin/bhyve/block_if.h ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/block_if.h Mon Sep 9 13:56:58 2013 (r257156) +++ soc2013/zcore/head/usr.sbin/bhyve/block_if.h Mon Sep 9 14:23:54 2013 (r257157) @@ -54,5 +54,6 @@ int blockif_write(struct blockif_ctxt *bc, struct blockif_req *breq); int blockif_cancel(struct blockif_ctxt *bc, struct blockif_req *breq); int blockif_close(struct blockif_ctxt *bc); +int blockif_fsync(struct blockif_ctxt *bc); #endif /* _BLOCK_IF_H_ */ Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 13:56:58 2013 (r257156) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:23:54 2013 (r257157) @@ -428,6 +428,7 @@ pthread_cond_wait(&p->flush_cond, &sc->mtx); p->flush_pending = 0; } + blockif_fsync(p->bctx); ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); } From owner-svn-soc-all@FreeBSD.ORG Mon Sep 9 14:25:25 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4652B8DC for ; Mon, 9 Sep 2013 14:25:25 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 3228C2A0C for ; Mon, 9 Sep 2013 14:25:25 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r89EPP6Y022819 for ; Mon, 9 Sep 2013 14:25:25 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r89EPP7g022813 for svn-soc-all@FreeBSD.org; Mon, 9 Sep 2013 14:25:25 GMT (envelope-from zcore@FreeBSD.org) Date: Mon, 9 Sep 2013 14:25:25 GMT Message-Id: <201309091425.r89EPP7g022813@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257158 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Sep 2013 14:25:25 -0000 Author: zcore Date: Mon Sep 9 14:25:24 2013 New Revision: 257158 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257158 Log: set ABORT for all unsupported cmds Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:23:54 2013 (r257157) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:25:24 2013 (r257158) @@ -570,6 +570,10 @@ handle_flush(p, slot, cfis); break; default: + p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; + p->is |= AHCI_P_IX_TFE; + p->ci &= ~(1 << slot); + ahci_generate_intr(sc); break; } } @@ -1006,13 +1010,11 @@ case AHCI_P_IE: case AHCI_P_CMD: case AHCI_P_TFD: - /* TODO */ case AHCI_P_SIG: case AHCI_P_SSTS: case AHCI_P_SCTL: case AHCI_P_SERR: case AHCI_P_SACT: - /* TODO */ case AHCI_P_CI: case AHCI_P_SNTF: case AHCI_P_FBS: From owner-svn-soc-all@FreeBSD.ORG Mon Sep 9 14:26:03 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A28118F8 for ; Mon, 9 Sep 2013 14:26:03 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 8F71B2A13 for ; Mon, 9 Sep 2013 14:26:03 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r89EQ3Jf030344 for ; Mon, 9 Sep 2013 14:26:03 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r89EQ3oo030339 for svn-soc-all@FreeBSD.org; Mon, 9 Sep 2013 14:26:03 GMT (envelope-from zcore@FreeBSD.org) Date: Mon, 9 Sep 2013 14:26:03 GMT Message-Id: <201309091426.r89EQ3oo030339@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257159 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Sep 2013 14:26:03 -0000 Author: zcore Date: Mon Sep 9 14:26:03 2013 New Revision: 257159 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257159 Log: don't disclaim SMART. we don't want to support it Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:25:24 2013 (r257158) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:26:03 2013 (r257159) @@ -475,10 +475,10 @@ buf[76] = (1 << 8 | 1 << 2); buf[80] = 0x1f0; buf[81] = 0x28; - buf[82] = (1 | 1 << 5 | 1 << 14); + buf[82] = (1 << 5 | 1 << 14); buf[83] = (1 << 10 | 1 << 12 | 1 << 13 | 1 << 14); buf[84] = (1 << 14); - buf[85] = (1 | 1 << 14); + buf[85] = (1 << 5 | 1 << 14); buf[86] = (1 << 10 | 1 << 12 | 1 << 13); buf[87] = (1 << 14); buf[88] = 0x7f; From owner-svn-soc-all@FreeBSD.ORG Mon Sep 9 14:26:35 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id D2946907 for ; Mon, 9 Sep 2013 14:26:35 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BF0AD2A15 for ; Mon, 9 Sep 2013 14:26:35 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r89EQZR0036666 for ; Mon, 9 Sep 2013 14:26:35 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r89EQZr8036661 for svn-soc-all@FreeBSD.org; Mon, 9 Sep 2013 14:26:35 GMT (envelope-from zcore@FreeBSD.org) Date: Mon, 9 Sep 2013 14:26:35 GMT Message-Id: <201309091426.r89EQZr8036661@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257160 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Sep 2013 14:26:35 -0000 Author: zcore Date: Mon Sep 9 14:26:35 2013 New Revision: 257160 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257160 Log: support ATA_NOP, ATA_STANDBY_IMMEDIATE, ATA_SLEEP etc. Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:26:03 2013 (r257159) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:26:35 2013 (r257160) @@ -569,6 +569,14 @@ case ATA_FLUSHCACHE48: handle_flush(p, slot, cfis); break; + case ATA_STANDBY_CMD: + break; + case ATA_NOP: + case ATA_STANDBY_IMMEDIATE: + case ATA_IDLE_IMMEDIATE: + case ATA_SLEEP: + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); + break; default: p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; p->is |= AHCI_P_IX_TFE; From owner-svn-soc-all@FreeBSD.ORG Mon Sep 9 14:27:18 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id F15A4926 for ; Mon, 9 Sep 2013 14:27:18 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C37DA2A1E for ; Mon, 9 Sep 2013 14:27:18 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r89ERI08045168 for ; Mon, 9 Sep 2013 14:27:18 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r89ERIoU045162 for svn-soc-all@FreeBSD.org; Mon, 9 Sep 2013 14:27:18 GMT (envelope-from zcore@FreeBSD.org) Date: Mon, 9 Sep 2013 14:27:18 GMT Message-Id: <201309091427.r89ERIoU045162@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257161 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Sep 2013 14:27:19 -0000 Author: zcore Date: Mon Sep 9 14:27:18 2013 New Revision: 257161 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257161 Log: add multi backing files support we can support up to 6 backing files. Each backing file per port. Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:26:35 2013 (r257160) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:27:18 2013 (r257161) @@ -753,42 +753,47 @@ static int pci_ahci_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) { - int i; + int i, ret = 0; struct pci_ahci_softc *sc; - char bident[sizeof("XX:X")]; - struct blockif_ctxt *bctxt; + char *str, *cpy, *fstr; if (opts == NULL) { printf("pci_ahci: backing device required\n"); return (1); } + str = cpy = strdup(opts); dbg = fopen("/tmp/log", "w+"); DPRINTF(("pci_ahci initializing\n")); - /* - * Attempt to open the backing image. Use the PCI slot/func - * for the identifier string since that uniquely identifies - * a storage device. - */ - snprintf(bident, sizeof(bident), "%d:%d", pi->pi_slot, pi->pi_func); - - bctxt = blockif_open(opts, bident); - if (bctxt == NULL) - return (1); - sc = malloc(sizeof(struct pci_ahci_softc)); memset(sc, 0, sizeof(struct pci_ahci_softc)); - pi->pi_arg = sc; sc->asc_pi = pi; - - sc->port[0].bctx = bctxt; - sc->ports = MAX_PORTS; + for (i = 0; i < sc->ports; i++) { - if (!sc->port[i].bctx) - continue; + char bident[sizeof("XX:X:X")]; + struct blockif_ctxt *bctxt; + + fstr = strsep(&str, ","); + if (fstr == NULL) + break; + /* + * Attempt to open the backing image. Use the PCI + * slot/func/ahci_port for the identifier string + * since that uniquely identifies a storage device. + */ + snprintf(bident, sizeof(bident), "%d:%d:%d", + pi->pi_slot, pi->pi_func, i); + + bctxt = blockif_open(fstr, bident); + if (bctxt == NULL) { + ret = 1; + goto open_fail; + } + + sc->port[i].bctx = bctxt; sc->port[i].pr_sc = sc; pthread_cond_init(&sc->port[i].flush_cond, NULL); /* @@ -821,7 +826,15 @@ pci_emul_alloc_bar(pi, 5, PCIBAR_MEM32, AHCI_OFFSET+sc->ports*AHCI_STEP); - return (0); +open_fail: + free(cpy); + if (ret) { + int n; + for (n = i - 1; n >= 0; n--) + blockif_close(sc->port[n].bctx); + free(sc); + } + return ret; } static void From owner-svn-soc-all@FreeBSD.ORG Mon Sep 9 14:28:09 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 2412E93F for ; Mon, 9 Sep 2013 14:28:09 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 103D72A24 for ; Mon, 9 Sep 2013 14:28:09 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r89ES84v053695 for ; Mon, 9 Sep 2013 14:28:08 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r89ES80g053693 for svn-soc-all@FreeBSD.org; Mon, 9 Sep 2013 14:28:08 GMT (envelope-from zcore@FreeBSD.org) Date: Mon, 9 Sep 2013 14:28:08 GMT Message-Id: <201309091428.r89ES80g053693@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257162 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Sep 2013 14:28:09 -0000 Author: zcore Date: Mon Sep 9 14:28:08 2013 New Revision: 257162 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257162 Log: consider the device as ATAPI if the file's suffix is .iso Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:27:18 2013 (r257161) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Mon Sep 9 14:28:08 2013 (r257162) @@ -773,12 +773,22 @@ sc->ports = MAX_PORTS; for (i = 0; i < sc->ports; i++) { + int len, suflen; + char suf[] = ".iso"; char bident[sizeof("XX:X:X")]; struct blockif_ctxt *bctxt; fstr = strsep(&str, ","); if (fstr == NULL) break; + + /* we consider it as ATAPI if the file's suffix is .iso */ + len = strlen(fstr); + suflen = strlen(suf); + if (len > suflen && + !strncmp(fstr + len - suflen, suf, suflen)) + sc->port[i].atapi = 1; + /* * Attempt to open the backing image. Use the PCI * slot/func/ahci_port for the identifier string From owner-svn-soc-all@FreeBSD.ORG Mon Sep 9 16:09:04 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id F36E7564 for ; Mon, 9 Sep 2013 16:09:03 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D028D214A for ; Mon, 9 Sep 2013 16:09:03 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r89G93jP006190 for ; Mon, 9 Sep 2013 16:09:03 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r89G93AI006166 for svn-soc-all@FreeBSD.org; Mon, 9 Sep 2013 16:09:03 GMT (envelope-from dpl@FreeBSD.org) Date: Mon, 9 Sep 2013 16:09:03 GMT Message-Id: <201309091609.r89G93AI006166@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257164 - in soc2013/dpl/head/lib/libzcap: . zlibworker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Sep 2013 16:09:04 -0000 Author: dpl Date: Mon Sep 9 16:09:03 2013 New Revision: 257164 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257164 Log: Code improved. Now we're not depending on capsicum.h as before. Modified: soc2013/dpl/head/lib/libzcap/adler32.c soc2013/dpl/head/lib/libzcap/capsicum.c soc2013/dpl/head/lib/libzcap/capsicum.h soc2013/dpl/head/lib/libzcap/commands.c soc2013/dpl/head/lib/libzcap/commands.h soc2013/dpl/head/lib/libzcap/crc32.c soc2013/dpl/head/lib/libzcap/deflate.c soc2013/dpl/head/lib/libzcap/gzlib.c soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Modified: soc2013/dpl/head/lib/libzcap/adler32.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/adler32.c Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/adler32.c Mon Sep 9 16:09:03 2013 (r257164) @@ -6,6 +6,7 @@ /* @(#) $Id$ */ #include "zutil.h" +#include "commands.h" #define local static Modified: soc2013/dpl/head/lib/libzcap/capsicum.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.c Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/capsicum.c Mon Sep 9 16:09:03 2013 (r257164) @@ -1,3 +1,4 @@ +#include "debug.h" #include "capsicum.h" #include "zlib.h" @@ -8,38 +9,62 @@ #include #include +#include +#include #include #include #include #include #include -#include /* * The only function allocating space * for struct sandbox is startChild(). */ -struct sandbox; -struct slisthead sandboxes; -struct sandbox * startSandbox(void *data); -void stopSandbox(struct sandbox *sandbox); +/* head of singly-linked list. */ +SLIST_HEAD(slisthead, sandbox) sandboxes = SLIST_HEAD_INITIALIZER(sandboxes); + +struct sandbox { + void * dataptr; /* Pointer to the data structure of the lib */ + int pd; /* Process descriptor */ + int socket; /* Socket we have to pass the data through */ + SLIST_ENTRY(sandbox) next; /* Singly-linked list. */ +}; + +void startSandbox(void *data); +void stopSandbox(void *ptr); void startNullSandbox(void); struct sandbox * findSandbox(void *ptr); struct sandbox *startChild(void *data); void killChild(void); void suicide(int signal); -nvlist_t * sendCommand(nvlist_t *nvl, int socket); +nvlist_t * sendCommand(nvlist_t *nvl, void *ptr); bool slist_initiated = 0; +/* At "debug.h" */ +extern int DEBUG_ZCAP; + +static void +limitfd(int fd, unsigned long long cap) +{ + cap_rights_t rights; + + cap_rights_init(&rights); + cap_rights_set(&rights, cap); + + if (cap_rights_limit(fd, &rights) < 0 && errno != ENOSYS) + err(1, "Couldn't limit fd: %d\n", fd); +} + /* * This function should be called only by: * gzopen(), deflateInit(), inflateInit(), * inflateBackInit(). */ -struct sandbox * +void startSandbox(void *data) { struct sandbox *newsandbox; @@ -50,8 +75,6 @@ /* Create and add the real sandbox */ newsandbox = startChild(data); SLIST_INSERT_HEAD(&sandboxes, newsandbox, next); - - return (newsandbox); } /* @@ -60,18 +83,17 @@ * deflateEnd, inflateEnd (inflateBackEnd). */ void -stopSandbox(struct sandbox *sandboxToStop) +stopSandbox(void *ptr) { - int pid; - - if (pdgetpid(sandboxToStop->pd, &pid) < 0) - err(1, "Couldn't get child PID"); + struct sandbox *box; - if (kill(SIGKILL, pid) < 0) - err(1, "Couldn't kill child"); + box = findSandbox(ptr); + if (DEBUG_ZCAP) + printf("DEBUG: Stopping sandbox:%d\n",box->pd ); + pdkill(box->pd, SIGKILL); - SLIST_REMOVE(&sandboxes, sandboxToStop, sandbox, next); - free(sandboxToStop); + SLIST_REMOVE(&sandboxes, box, sandbox, next); + free(box); } /* Starts the default sandbox. */ @@ -79,8 +101,12 @@ startNullSandbox(void) { struct sandbox *newsandbox; + if (DEBUG_ZCAP) + printf("DEBUG: Starting NULL sandbox\n"); + if (!slist_initiated) { SLIST_INIT(&sandboxes); + /* Here we add a sandbox used for non-structure related stuff */ /* This will be the first sandbox always */ if (SLIST_EMPTY(&sandboxes)) { @@ -124,34 +150,47 @@ sv[0] = sv[1] = 0; if (socketpair(PF_LOCAL, SOCK_STREAM, 0, sv) < 0 ) perror("zcaplib: socketpair()"); + if (DEBUG_ZCAP) + printf("DEBUG: Called socketpair(): sv[0]: %d, sv[1]: %d\n", sv[0], sv[1]); procd = pdfork(&procd, 0); - if (procd == 0 ){ - if (cap_rights_limit(STDIN_FILENO, CAP_READ) < 0) - err(1, "Couldn't limit rights"); - if (cap_rights_limit(STDOUT_FILENO, CAP_WRITE|CAP_FSTAT) < 0) - err(1, "Couldn't limit rights"); - if (cap_rights_limit(STDERR_FILENO, CAP_WRITE) < 0) - err(1, "Couldn't limit rights"); - dup2(sv[0], 3); - if (cap_rights_limit(3, CAP_WRITE|CAP_READ|CAP_POLL_EVENT) < 0) - err(1, "Couldn't limit rights"); + if (procd == 0 ) { + /* Sandbox the process */ + if (cap_enter() < 0) + err(1, "Couldn't enter capability mode"); + + if (DEBUG_ZCAP) + printf("DEBUG: STDIN_FILENO: %d\n", STDIN_FILENO); + + limitfd(STDIN_FILENO, CAP_READ); + limitfd(STDOUT_FILENO, CAP_WRITE|CAP_FSTAT); + limitfd(STDERR_FILENO, CAP_WRITE); + + if (dup2(sv[0], 3) != 3) + err(1, "Couldn't duplicate fd"); closefrom(4); + limitfd(3, CAP_WRITE|CAP_READ|CAP_POLL_EVENT); + /* execl() zlibworker */ - if ( execl("/usr/libexec/zlibworker", "zlibworker", NULL) < 0) { + if ( execl("/usr/libexec/zlibworker", "zlibworker", NULL) < 0) err(1, "Couldn't find zlibworker."); - } + exit(0); } else if (procd == -1) { err(1, "Couldn't fork"); } else { - close(sv[1]); + if ( DEBUG_ZCAP ) + printf("DEBUG: Done forking: %d\n", procd); + signal(SIGCHLD, suicide); atexit(killChild); newsandbox->dataptr = data; newsandbox->pd = procd; newsandbox->socket = sv[0]; + if (DEBUG_ZCAP) + printf("DEBUG: We have started a new sandbox.\n"); + printf("\tpd: %d, socket: %d\n", newsandbox->pd, newsandbox->socket); } return (newsandbox); } @@ -159,6 +198,8 @@ void killChild(void) { int pid; struct sandbox *box; + + /* Kill all sandboxes. */ SLIST_FOREACH(box, &sandboxes, next) if (pdgetpid(box->pd, &pid) > 0) kill(SIGKILL, pid); @@ -167,13 +208,20 @@ kill(getpid(), SIGKILL); } +/* Sends nvlist to the related sandbox. */ nvlist_t * -sendCommand(nvlist_t *nvl, int socket) +sendCommand(nvlist_t *nvl, void *ptr) { nvlist_t *new; - if( nvlist_send(socket, nvl) != 0 ) + struct sandbox *box; + + box = findSandbox(ptr); + if (DEBUG_ZCAP) + printf("DEBUG: Sending command to %d sandbox\n", box->pd); + + if( nvlist_send(box->socket, nvl) != 0 ) err(1, "zcaplib: nvlist_send() Went wrong"); - if ((new = nvlist_recv(socket)) == NULL) + if ((new = nvlist_recv(box->socket)) == NULL) err(1, "nvlist_recv(): nvlist_t is NULL"); return (new); } Modified: soc2013/dpl/head/lib/libzcap/capsicum.h ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.h Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/capsicum.h Mon Sep 9 16:09:03 2013 (r257164) @@ -8,29 +8,12 @@ #include -#define MAXLEN (5*1024) - -struct sandbox * startSandbox(void *data); -void stopSandbox(struct sandbox *sandbox); +void startSandbox(void *data); +void stopSandbox(void *ptr); void startNullSandbox(void); struct sandbox * findSandbox(void *ptr); struct sandbox *startChild(void *data); void killChild(void); void suicide(int signal); -nvlist_t * sendCommand(nvlist_t *nvl, int socket); - -/* head of singly-linked list. */ -SLIST_HEAD(slisthead, sandbox) sandboxes = SLIST_HEAD_INITIALIZER(sandboxes); - -/* - * This structure holds a relation of structs of data structs, - * and its related process descriptor (pd). - */ -struct sandbox { - void * dataptr; /* Pointer to the data structure of the lib */ - int pd; /* Process descriptor */ - int socket; /* Socket we have to pass the data through */ - SLIST_ENTRY(sandbox) next; /* Singly-linked list. */ -}; - -#endif /* CAPSICUM_H */ \ No newline at end of file +nvlist_t * sendCommand(nvlist_t *nvl, void *ptr); +#endif /* !CAPSICUM_H */ \ No newline at end of file Modified: soc2013/dpl/head/lib/libzcap/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/commands.c Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/commands.c Mon Sep 9 16:09:03 2013 (r257164) @@ -8,9 +8,11 @@ #include #include +#include +#include -static void initializeCommand(void); +static void initNvl(void); static void destroy(void); @@ -82,24 +84,24 @@ uLong zcapcmd_crc32_combine(uLong crc1, uLong crc2, z_off64_t len2); -extern nvlist_t *sendCommand(nvlist_t *); -extern void *data; +extern nvlist_t *sendCommand(nvlist_t *, void *ptr); +extern void startSandbox(void *data); +extern void startNullSandbox(); +extern bool slist_initiated; nvlist_t *nvl, *args, *result; size_t gzfilesize = sizeof(gzFile); size_t gzheadersize = sizeof(struct gz_header_s); size_t zstreamsize = sizeof(z_stream); -static sandbox_s* -initializeCommand(void *ptr) { - sandbox_s *sanbox; +void +initNvl() { + if (!slist_initiated) + startNullSandbox(); - sandbox = findSandbox(ptr); if( (args = nvlist_create(0)) == NULL || (nvl = nvlist_create(0)) == NULL ) err(1, "zcaplib: nvlist_create"); - - return sandbox; } static void @@ -116,7 +118,8 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); + startSandbox(strm); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEINIT); /* No worries here, strm state will be saved on zlibworker */ @@ -130,7 +133,7 @@ nvlist_add_number(args, "stream_size", stream_size); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); /* * We get the "good" struct from the worker. @@ -154,13 +157,13 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEINIT); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -177,12 +180,12 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEEND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -191,6 +194,7 @@ else err(1, "libzcap: deflateEnd() destroyed z_stream\n"); destroy(); + stopSandbox(strm); return(ret); } @@ -202,7 +206,8 @@ const z_stream *newstrm; const char *msg; - initializeCommand(); + initNvl(); + startSandbox(strm); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEINIT); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -211,7 +216,7 @@ nvlist_add_number(args, "stream_size", stream_size); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -229,13 +234,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATE); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -251,13 +256,13 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEEND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -275,14 +280,14 @@ /* XXX */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATESETDICTIONARY); nvlist_add_binary(args, "dictionary", *dictionary, dictLength); nvlist_add_number(args, "dictLength", dictLength); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -296,15 +301,15 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATECOPY); nvlist_add_binary(args, "dest", (void *)dest, zstreamsize); nvlist_add_binary(args, "source", (void *)source, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - /* The two z_streamp are now copied at the worker. */ - result = sendCommand(nvl); + /* The dest z_streamp is copied at its sandbox. */ + result = sendCommand(nvl, dest); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -318,13 +323,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATERESET); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); /* Save the reseted strm. */ @@ -341,7 +346,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEPARAMS); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -349,7 +354,7 @@ nvlist_add_number(args, "strategy", strategy); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); /* Overwrite the old streamp */ @@ -365,7 +370,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATETUNE); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -375,7 +380,7 @@ nvlist_add_number(args, "max_chain", max_chain); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -389,14 +394,14 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEBOUND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_number(args, "sourceLen", sourceLen); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -410,7 +415,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEPENDING); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -419,7 +424,7 @@ nvlist_add_number(args, "bits", *bits); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -433,7 +438,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEPRIME); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -441,7 +446,7 @@ nvlist_add_number(args, "value", value); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -457,7 +462,7 @@ /* What happens with header->extra??? */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATESETHEADER); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -466,7 +471,7 @@ nvlist_add_string(nvl, "comment", head->comment); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -481,13 +486,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATESETDICTIONARY); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -502,13 +507,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEGETDICTIONARY); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -522,13 +527,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATESYNC); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -542,15 +547,16 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATECOPY); nvlist_add_binary(args, "dest", (void *)dest, zstreamsize); nvlist_add_binary(args, "source", (void *)source, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - /* The two z_streamp are now copied at the worker. */ - result = sendCommand(nvl); + /* The dest z_streamp is copied at its sandbox. */ + /* XXX - There's a problem with this, we can't copy internat_state */ + result = sendCommand(nvl, dest); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -564,13 +570,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATERESET); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -586,14 +592,14 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATERESET2); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_number(nvl, "windowBits", windowBits); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -609,7 +615,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEPRIME); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -617,7 +623,7 @@ nvlist_add_number(args, "value", value); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -631,13 +637,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEMARK); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -652,14 +658,14 @@ /* XXX: Beware of gz_headerp extra */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEGETHEADER); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_binary(args, "head", (void *)head, gzheadersize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -677,14 +683,14 @@ /* window has to be a pointer to at least a 32kb buffer */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEBACKINIT); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_number(args, "windowBits", windowBits); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -701,13 +707,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEBACK); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -721,13 +727,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEBACKEND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -741,12 +747,12 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_ZLIBCOMPILEFLAGS); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, NULL); ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -759,13 +765,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_COMPRESSBOUND); nvlist_add_number(args, "sourceLen", sourceLen); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, NULL); ret = dnvlist_get_number(result, "result", NULL); destroy(); return(ret); @@ -777,14 +783,16 @@ { gzFile *fileptr; gzFile file; - initializeCommand(); + + initNvl(); + startSandbox(file); nvlist_add_number(nvl, "command", ZCAPCMD_GZOPEN); nvlist_move_descriptor(args, "fd", fd); nvlist_add_string(args, "mode", mode); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); fileptr = (gzFile *)dnvlist_get_binary(result, "result", &gzfilesize, NULL, sizeof(NULL)); file = *fileptr; @@ -798,14 +806,14 @@ zcapcmd_gzbuffer(gzFile file, unsigned size) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZBUFFER); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "size", size); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -816,7 +824,7 @@ zcapcmd_gzsetparams(gzFile file, int level, int strategy) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZSETPARAMS); nvlist_add_binary(args, "file", file, gzfilesize); @@ -824,7 +832,7 @@ nvlist_add_number(args, "strategy", strategy); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -836,14 +844,14 @@ { const void * data; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZREAD); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); data = dnvlist_get_binary(result, "data", len, NULL, sizeof(NULL)); @@ -855,7 +863,7 @@ int zcapcmd_gzwrite(gzFile file, voidp buf, unsigned len) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZWRITE); nvlist_add_binary(args, "file", file, gzfilesize); @@ -863,7 +871,7 @@ nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -873,14 +881,14 @@ int zcapcmd_gzprintf(gzFile file, const char * str) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPRINTF); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_string(args, "str", str); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -891,14 +899,14 @@ zcapcmd_gzputs(gzFile file, const char *s) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTS); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_string(args, "s", s); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -909,14 +917,14 @@ zcapcmd_gzgets(gzFile file, char *buf, int len) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZGETS); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); const char *ret = dnvlist_get_string(result, "result", NULL); if (ret == NULL) @@ -931,14 +939,14 @@ zcapcmd_gzputc(gzFile file, int c) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTC); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "c", c); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -949,14 +957,14 @@ zcapcmd_gzungetc(int c, gzFile file) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZUNGETC); nvlist_add_number(args, "c", c); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -967,14 +975,14 @@ zcapcmd_gzflush(gzFile file, int flush) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZFLUSH); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "flush", flush); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-soc-all@FreeBSD.ORG Tue Sep 10 08:00:29 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 3C4E1DF6 for ; Tue, 10 Sep 2013 08:00:29 +0000 (UTC) (envelope-from oleksandr@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0FEB72223 for ; Tue, 10 Sep 2013 08:00:29 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8A80Shj031956 for ; Tue, 10 Sep 2013 08:00:28 GMT (envelope-from oleksandr@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8A80SAx031937 for svn-soc-all@FreeBSD.org; Tue, 10 Sep 2013 08:00:28 GMT (envelope-from oleksandr@FreeBSD.org) Date: Tue, 10 Sep 2013 08:00:28 GMT Message-Id: <201309100800.r8A80SAx031937@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to oleksandr@FreeBSD.org using -f From: oleksandr@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257183 - soc2013/oleksandr/SharedFolder-head/sbin/mount_vboxfs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Sep 2013 08:00:29 -0000 Author: oleksandr Date: Tue Sep 10 08:00:28 2013 New Revision: 257183 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257183 Log: Initial ontly RDONLY support Modified: soc2013/oleksandr/SharedFolder-head/sbin/mount_vboxfs/mount_vboxfs.c Modified: soc2013/oleksandr/SharedFolder-head/sbin/mount_vboxfs/mount_vboxfs.c ============================================================================== --- soc2013/oleksandr/SharedFolder-head/sbin/mount_vboxfs/mount_vboxfs.c Tue Sep 10 05:59:09 2013 (r257182) +++ soc2013/oleksandr/SharedFolder-head/sbin/mount_vboxfs/mount_vboxfs.c Tue Sep 10 08:00:28 2013 (r257183) @@ -26,17 +26,20 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ - -#include +#include #include -#include +#include +#include +#include #include +#include #include #include - + #include -#include +#include #include +#include #include #include #include @@ -80,7 +83,7 @@ mode_t dir_mode, file_mode; int iovlen; int error, ch, ronly = 0; - int mntflags = MNT_RDONLY; + int mntflags; iov = NULL; iovlen = 0; @@ -142,11 +145,14 @@ if (dir_mode & S_IROTH) dir_mode |= S_IXOTH; } - + + /* + * VBOXFS file systems are not writeable. + */ + mntflags |= MNT_RDONLY; build_iovec(&iov, &iovlen, "fstype", vboxfs_vfsname, (size_t)-1); build_iovec(&iov, &iovlen, "fspath", mount_point, (size_t)-1); - build_iovec(&iov, &iovlen, "hostname", host_name, -1); - build_iovec(&iov, &iovlen, "mountpoint", mount_point, -1); + build_iovec(&iov, &iovlen, "from", host_name, (size_t)-1); build_iovec_argf(&iov, &iovlen, "uid", "%d", uid); build_iovec_argf(&iov, &iovlen, "gid", "%d", gid); build_iovec_argf(&iov, &iovlen, "file_mode", "%d", file_mode); @@ -161,8 +167,7 @@ * un-mangle it again. */ char szCWD[4096]; size_t cchCWD; - if (!getcwd(szCWD, sizeof(szCWD))) - printf("%s: failed to get the current working directory", argv[0]); + cchCWD = strlen(szCWD); if (!strncmp(host_name, szCWD, cchCWD)) { @@ -172,7 +177,7 @@ strcpy(host_name, host_name + cchCWD); } error = nmount(iov, iovlen, mntflags); - } + } if (error) { if (errmsg[0] != 0) { From owner-svn-soc-all@FreeBSD.ORG Tue Sep 10 09:14:38 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id AB762481 for ; Tue, 10 Sep 2013 09:14:38 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 99660265E for ; Tue, 10 Sep 2013 09:14:38 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8A9Ec66033924 for ; Tue, 10 Sep 2013 09:14:38 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8A9EcvH033921 for svn-soc-all@FreeBSD.org; Tue, 10 Sep 2013 09:14:38 GMT (envelope-from dpl@FreeBSD.org) Date: Tue, 10 Sep 2013 09:14:38 GMT Message-Id: <201309100914.r8A9EcvH033921@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257184 - soc2013/dpl/head/contrib/bzip2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Sep 2013 09:14:38 -0000 Author: dpl Date: Tue Sep 10 09:14:38 2013 New Revision: 257184 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257184 Log: Changed bzip2 to use cap_rights_init instead of cap_rights_init();; cap_rights_set(); Modified: soc2013/dpl/head/contrib/bzip2/bzip2.c Modified: soc2013/dpl/head/contrib/bzip2/bzip2.c ============================================================================== --- soc2013/dpl/head/contrib/bzip2/bzip2.c Tue Sep 10 08:00:28 2013 (r257183) +++ soc2013/dpl/head/contrib/bzip2/bzip2.c Tue Sep 10 09:14:38 2013 (r257184) @@ -671,14 +671,15 @@ cap_rights_t rights; cap_rights_init(&rights); + if (fd == OUT_FILENO) - cap_rights_set(&rights, CAP_READ|CAP_FSTAT|CAP_WRITE|CAP_FCHMOD|CAP_FCHOWN|CAP_FUTIMES); + cap_rights_init(&rights, CAP_READ, CAP_FSTAT, CAP_WRITE, CAP_FCHMOD, CAP_FCHOWN, CAP_FUTIMES); else if (fd == IN_FILENO) - cap_rights_set(&rights, CAP_WRITE|CAP_READ|CAP_FSTAT); + cap_rights_init(&rights, CAP_WRITE, CAP_READ, CAP_FSTAT); else if (fd == STDERR_FILENO) - cap_rights_set(&rights, CAP_WRITE); + cap_rights_init(&rights, CAP_WRITE); else if (fd == cwd) - cap_rights_set(&rights, CAP_UNLINKAT|CAP_LOOKUP); + cap_rights_init(&rights, CAP_UNLINKAT, CAP_LOOKUP); else { fprintf (stderr, "%s: Wrong file descriptor.\n", progName); setExit(1); From owner-svn-soc-all@FreeBSD.ORG Tue Sep 10 09:38:02 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DDCEBCEB for ; Tue, 10 Sep 2013 09:38:02 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B16C427E9 for ; Tue, 10 Sep 2013 09:38:02 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8A9c2Jv065797 for ; Tue, 10 Sep 2013 09:38:02 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8A9c2d0065791 for svn-soc-all@FreeBSD.org; Tue, 10 Sep 2013 09:38:02 GMT (envelope-from dpl@FreeBSD.org) Date: Tue, 10 Sep 2013 09:38:02 GMT Message-Id: <201309100938.r8A9c2d0065791@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257185 - soc2013/dpl/head/contrib/xz/src/xz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Sep 2013 09:38:02 -0000 Author: dpl Date: Tue Sep 10 09:38:02 2013 New Revision: 257185 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257185 Log: Something's wrong here Modified: soc2013/dpl/head/contrib/xz/src/xz/file_io.c Modified: soc2013/dpl/head/contrib/xz/src/xz/file_io.c ============================================================================== --- soc2013/dpl/head/contrib/xz/src/xz/file_io.c Tue Sep 10 09:14:38 2013 (r257184) +++ soc2013/dpl/head/contrib/xz/src/xz/file_io.c Tue Sep 10 09:38:02 2013 (r257185) @@ -1020,19 +1020,27 @@ } #if defined(CAPSICUM) -void limitfd(int, unsigned long long); +void limitfd(int, cap_rights_t *rights); extern void limitpair(file_pair *pair) { + cap_rights_t dir_cap; + cap_rights_t src_cap; + cap_rights_t dest_cap; + + cap_rights_init(&dir_cap, CAP_FSTATAT, CAP_UNLINKAT, CAP_LOOKUP); + cap_rights_init(&src_cap, CAP_READ, CAP_SEEK); + cap_rights_init(&dest_cap, CAP_WRITE, CAP_FSTAT, CAP_FCHOWN, CAP_FCHMOD, CAP_FUTIMES); + if(pair->dir_fd != -1 ) - limitfd(pair->dir_fd, CAP_FSTATAT|CAP_UNLINKAT|CAP_LOOKUP); + limitfd(pair->dir_fd, &dir_cap); if(pair->src_fd != -1 ) - limitfd(pair->src_fd, CAP_READ|CAP_SEEK); + limitfd(pair->src_fd, &src_cap); if(pair->dest_fd != -1 ) - limitfd(pair->dest_fd, CAP_WRITE|CAP_FSTAT|CAP_FCHOWN|CAP_FCHMOD|CAP_FUTIMES); + limitfd(pair->dest_fd, &dest_cap); return; } @@ -1040,12 +1048,17 @@ extern void capsicum_enter(void) { - cap_rights_t rights; - - cap_rights_init(&rights); - limitfd( STDIN_FILENO, CAP_READ); - limitfd( STDOUT_FILENO, CAP_WRITE); - limitfd( STDERR_FILENO, CAP_WRITE); + cap_rights_t stdin_cap; + cap_rights_t stdout_cap; + cap_rights_t stderr_cap; + + cap_rights_init(&stdin_cap, CAP_READ); + cap_rights_init(&stdout_cap, CAP_WRITE); + cap_rights_init(&stderr_cap, CAP_WRITE); + + limitfd(&stdin_cap, CAP_READ); + limitfd(&stdout_cap, CAP_WRITE); + limitfd(&stderr_cap, CAP_WRITE); if (cap_enter() < 0 && errno != ENOSYS) { message_error("cap_enter: %s", strerror(errno)); @@ -1056,21 +1069,19 @@ } void -limitfd(int fd, unsigned long long cap) +limitfd(int fd, cap_rights_t *rights) { - cap_rights_t rights; - - cap_rights_init(&rights); - cap_rights_set(&rights, cap); + int rightsget; - if( cap_rights_get(fd, &rights) < 0 && errno != ENOSYS) { + rightsget = cap_rights_get(fd, rights); + if( rightsget < 0 && errno != ENOSYS) { message_error("%d: %s", fd, strerror(errno)); exit(E_ERROR); - } else { - if (cap_rights_limit(fd, &rights) < 0 && errno != ENOSYS){ - message_error("%d: %s", STDIN_FILENO, strerror(errno)); - exit(E_ERROR); - } + } + + if (cap_rights_limit(fd, rights) < 0 && errno != ENOSYS) { + message_error("%d: %s", STDIN_FILENO, strerror(errno)); + exit(E_ERROR); } } #endif /* CAPSICUM */ From owner-svn-soc-all@FreeBSD.ORG Tue Sep 10 11:46:11 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8A684BA9 for ; Tue, 10 Sep 2013 11:46:11 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 7683B214C for ; Tue, 10 Sep 2013 11:46:11 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8ABkBCN049597 for ; Tue, 10 Sep 2013 11:46:11 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8ABkBTk049594 for svn-soc-all@FreeBSD.org; Tue, 10 Sep 2013 11:46:11 GMT (envelope-from dpl@FreeBSD.org) Date: Tue, 10 Sep 2013 11:46:11 GMT Message-Id: <201309101146.r8ABkBTk049594@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257194 - soc2013/dpl/head/contrib/xz/src/xz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Sep 2013 11:46:11 -0000 Author: dpl Date: Tue Sep 10 11:46:11 2013 New Revision: 257194 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257194 Log: Reverted back just to make sure this works. Also, added a check for malloc(). Modified: soc2013/dpl/head/contrib/xz/src/xz/file_io.c soc2013/dpl/head/contrib/xz/src/xz/main.c Modified: soc2013/dpl/head/contrib/xz/src/xz/file_io.c ============================================================================== --- soc2013/dpl/head/contrib/xz/src/xz/file_io.c Tue Sep 10 10:38:15 2013 (r257193) +++ soc2013/dpl/head/contrib/xz/src/xz/file_io.c Tue Sep 10 11:46:11 2013 (r257194) @@ -1020,68 +1020,73 @@ } #if defined(CAPSICUM) -void limitfd(int, cap_rights_t *rights); - extern void limitpair(file_pair *pair) { - cap_rights_t dir_cap; - cap_rights_t src_cap; - cap_rights_t dest_cap; - - cap_rights_init(&dir_cap, CAP_FSTATAT, CAP_UNLINKAT, CAP_LOOKUP); - cap_rights_init(&src_cap, CAP_READ, CAP_SEEK); - cap_rights_init(&dest_cap, CAP_WRITE, CAP_FSTAT, CAP_FCHOWN, CAP_FCHMOD, CAP_FUTIMES); - - if(pair->dir_fd != -1 ) - limitfd(pair->dir_fd, &dir_cap); + cap_rights_t rights; - if(pair->src_fd != -1 ) - limitfd(pair->src_fd, &src_cap); + if(pair->dir_fd != -1 ){ + rights = CAP_FSTATAT|CAP_UNLINKAT|CAP_LOOKUP; + if (cap_rights_limit(pair->dir_fd, rights) < 0 && errno != ENOSYS){ + message_error("%s: %s", pair->dest_name, strerror(errno)); + exit(E_ERROR); + } + } - if(pair->dest_fd != -1 ) - limitfd(pair->dest_fd, &dest_cap); + if(pair->src_fd != -1 ){ + rights = CAP_READ|CAP_SEEK; + if (cap_rights_limit(pair->src_fd, rights) < 0 && errno != ENOSYS){ + message_error("%s: %s", pair->src_name, strerror(errno)); + exit(E_ERROR); + } + } + if(pair->dest_fd != -1 ){ + rights = CAP_WRITE|CAP_FSTAT|CAP_FCHOWN + |CAP_FCHMOD|CAP_FUTIMES; + if (cap_rights_limit(pair->dest_fd, rights) < 0 && errno != ENOSYS){ + message_error("%s: %s", pair->dest_name, strerror(errno)); + exit(E_ERROR); + } + } return; } extern void capsicum_enter(void) { - cap_rights_t stdin_cap; - cap_rights_t stdout_cap; - cap_rights_t stderr_cap; - - cap_rights_init(&stdin_cap, CAP_READ); - cap_rights_init(&stdout_cap, CAP_WRITE); - cap_rights_init(&stderr_cap, CAP_WRITE); - - limitfd(&stdin_cap, CAP_READ); - limitfd(&stdout_cap, CAP_WRITE); - limitfd(&stderr_cap, CAP_WRITE); + cap_rights_t rights; - if (cap_enter() < 0 && errno != ENOSYS) { - message_error("cap_enter: %s", strerror(errno)); + if( cap_rights_get(STDIN_FILENO, &rights) < 0 && errno != ENOSYS) { + message_error("%d: %s", STDIN_FILENO, strerror(errno)); exit(E_ERROR); + } else if (rights == 0) { + if (cap_rights_limit(STDIN_FILENO, CAP_WRITE) < 0 && errno != ENOSYS){ + message_error("%d: %s", STDIN_FILENO, strerror(errno)); + exit(E_ERROR); + } } - return; -} - -void -limitfd(int fd, cap_rights_t *rights) -{ - int rightsget; + if( cap_rights_get(STDOUT_FILENO, &rights) < 0 && errno != ENOSYS) { + message_error("%d: %s", STDOUT_FILENO, strerror(errno)); + exit(E_ERROR); + } else if (rights == 0) { + if (cap_rights_limit(STDOUT_FILENO, CAP_WRITE) < 0 && errno != ENOSYS){ + message_error("%d: %s", STDOUT_FILENO, strerror(errno)); + exit(E_ERROR); + } + } - rightsget = cap_rights_get(fd, rights); - if( rightsget < 0 && errno != ENOSYS) { - message_error("%d: %s", fd, strerror(errno)); + if (cap_rights_limit(STDERR_FILENO, CAP_WRITE) < 0 && errno != ENOSYS){ + message_error("%d: %s", STDERR_FILENO, strerror(errno)); exit(E_ERROR); } - if (cap_rights_limit(fd, rights) < 0 && errno != ENOSYS) { - message_error("%d: %s", STDIN_FILENO, strerror(errno)); + if (cap_enter() < 0 && errno != ENOSYS){ + message_error("cap_enter: %s", strerror(errno)); exit(E_ERROR); } + + return; } -#endif /* CAPSICUM */ +#endif Modified: soc2013/dpl/head/contrib/xz/src/xz/main.c ============================================================================== --- soc2013/dpl/head/contrib/xz/src/xz/main.c Tue Sep 10 10:38:15 2013 (r257193) +++ soc2013/dpl/head/contrib/xz/src/xz/main.c Tue Sep 10 11:46:11 2013 (r257194) @@ -146,6 +146,10 @@ // If we get past of 8 elements, realloc 8 more. // XXX check char **files = malloc( 8*sizeof(char*) ); + if (files == NULL) { + message_error("malloc: %s", strerror(errno)); + exit(E_ERROR); + } #if defined(_WIN32) && !defined(__CYGWIN__) InitializeCriticalSection(&exit_status_cs); From owner-svn-soc-all@FreeBSD.ORG Tue Sep 10 18:57:50 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 0D44E5B0 for ; Tue, 10 Sep 2013 18:57:50 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DFD1A22C1 for ; Tue, 10 Sep 2013 18:57:49 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8AIvnpa090196 for ; Tue, 10 Sep 2013 18:57:49 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8AIvnlA090188 for svn-soc-all@FreeBSD.org; Tue, 10 Sep 2013 18:57:49 GMT (envelope-from dpl@FreeBSD.org) Date: Tue, 10 Sep 2013 18:57:49 GMT Message-Id: <201309101857.r8AIvnlA090188@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257199 - soc2013/dpl/head/contrib/xz/src/xz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Sep 2013 18:57:50 -0000 Author: dpl Date: Tue Sep 10 18:57:49 2013 New Revision: 257199 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257199 Log: Finally xz is working as it should. Modified: soc2013/dpl/head/contrib/xz/src/xz/file_io.c soc2013/dpl/head/contrib/xz/src/xz/main.c Modified: soc2013/dpl/head/contrib/xz/src/xz/file_io.c ============================================================================== --- soc2013/dpl/head/contrib/xz/src/xz/file_io.c Tue Sep 10 17:26:09 2013 (r257198) +++ soc2013/dpl/head/contrib/xz/src/xz/file_io.c Tue Sep 10 18:57:49 2013 (r257199) @@ -12,6 +12,10 @@ #include "private.h" +#ifdef CAPSICUM +# include +#endif + #include #ifdef TUKLIB_DOSLIKE @@ -993,7 +997,7 @@ // Set and possibly print the filename for the progress message. message_filename(filename[i]); - if (opt_mode == MODE_LIST) { + if (opt_mode == MODE_LIST) { if (filename[i] == stdin_filename) { message_error(_("--list does not support reading from " "standard input")); @@ -1026,25 +1030,24 @@ cap_rights_t rights; if(pair->dir_fd != -1 ){ - rights = CAP_FSTATAT|CAP_UNLINKAT|CAP_LOOKUP; - if (cap_rights_limit(pair->dir_fd, rights) < 0 && errno != ENOSYS){ + cap_rights_init(&rights, CAP_FSTATAT, CAP_UNLINKAT, CAP_LOOKUP); + if (cap_rights_limit(pair->dir_fd, &rights) < 0 && errno != ENOSYS){ message_error("%s: %s", pair->dest_name, strerror(errno)); exit(E_ERROR); } } if(pair->src_fd != -1 ){ - rights = CAP_READ|CAP_SEEK; - if (cap_rights_limit(pair->src_fd, rights) < 0 && errno != ENOSYS){ + cap_rights_init(&rights, CAP_READ, CAP_SEEK); + if (cap_rights_limit(pair->src_fd, &rights) < 0 && errno != ENOSYS){ message_error("%s: %s", pair->src_name, strerror(errno)); exit(E_ERROR); } } if(pair->dest_fd != -1 ){ - rights = CAP_WRITE|CAP_FSTAT|CAP_FCHOWN - |CAP_FCHMOD|CAP_FUTIMES; - if (cap_rights_limit(pair->dest_fd, rights) < 0 && errno != ENOSYS){ + cap_rights_init(&rights, CAP_WRITE, CAP_FSTAT, CAP_FCHOWN, CAP_FCHMOD, CAP_FUTIMES); + if (cap_rights_limit(pair->dest_fd, &rights) < 0 && errno != ENOSYS){ message_error("%s: %s", pair->dest_name, strerror(errno)); exit(E_ERROR); } @@ -1055,29 +1058,33 @@ extern void capsicum_enter(void) { - cap_rights_t rights; + cap_rights_t stdin_cap; + cap_rights_t write_cap; - if( cap_rights_get(STDIN_FILENO, &rights) < 0 && errno != ENOSYS) { + cap_rights_init(&stdin_cap, CAP_READ); + cap_rights_init(&write_cap, CAP_WRITE); + +/* if( cap_rights_get(STDIN_FILENO, &rights) < 0 && errno != ENOSYS) { message_error("%d: %s", STDIN_FILENO, strerror(errno)); exit(E_ERROR); - } else if (rights == 0) { - if (cap_rights_limit(STDIN_FILENO, CAP_WRITE) < 0 && errno != ENOSYS){ + } else if (rights == 0) {*/ + if (cap_rights_limit(STDIN_FILENO, &stdin_cap) < 0 && errno != ENOSYS){ message_error("%d: %s", STDIN_FILENO, strerror(errno)); exit(E_ERROR); } - } + //} - if( cap_rights_get(STDOUT_FILENO, &rights) < 0 && errno != ENOSYS) { +/* if( cap_rights_get(STDOUT_FILENO, &rights) < 0 && errno != ENOSYS) { message_error("%d: %s", STDOUT_FILENO, strerror(errno)); exit(E_ERROR); - } else if (rights == 0) { - if (cap_rights_limit(STDOUT_FILENO, CAP_WRITE) < 0 && errno != ENOSYS){ + } else if (rights == 0) { */ + if (cap_rights_limit(STDOUT_FILENO, &write_cap) < 0 && errno != ENOSYS){ message_error("%d: %s", STDOUT_FILENO, strerror(errno)); exit(E_ERROR); } - } + //} - if (cap_rights_limit(STDERR_FILENO, CAP_WRITE) < 0 && errno != ENOSYS){ + if (cap_rights_limit(STDERR_FILENO, &write_cap) < 0 && errno != ENOSYS){ message_error("%d: %s", STDERR_FILENO, strerror(errno)); exit(E_ERROR); } Modified: soc2013/dpl/head/contrib/xz/src/xz/main.c ============================================================================== --- soc2013/dpl/head/contrib/xz/src/xz/main.c Tue Sep 10 17:26:09 2013 (r257198) +++ soc2013/dpl/head/contrib/xz/src/xz/main.c Tue Sep 10 18:57:49 2013 (r257199) @@ -144,8 +144,7 @@ int forkpid, i, nfiles=0; //Filenames will be here, and get passed to io_open_files(). // If we get past of 8 elements, realloc 8 more. - // XXX check - char **files = malloc( 8*sizeof(char*) ); + char **files = malloc(8*sizeof(char*)); if (files == NULL) { message_error("malloc: %s", strerror(errno)); exit(E_ERROR); @@ -253,9 +252,8 @@ // This way error messages get a proper filename // string and the code still knows that it is // handling the special case of stdin. - size_t len = strlen(stdin_filename)+1; - files[i] = malloc(len); - strncpy(files[i], stdin_filename, len); + args.arg_names[i] = (char *)stdin_filename; + files[i] = (char *)stdin_filename; } else { size_t len = strlen(args.arg_names[i])+1; files[i] = malloc(len); From owner-svn-soc-all@FreeBSD.ORG Thu Sep 12 08:06:20 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 270C74D0 for ; Thu, 12 Sep 2013 08:06:20 +0000 (UTC) (envelope-from syuu@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1240A2A69 for ; Thu, 12 Sep 2013 08:06:20 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8C86KUK083985 for ; Thu, 12 Sep 2013 08:06:20 GMT (envelope-from syuu@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8C86JLw083964 for svn-soc-all@FreeBSD.org; Thu, 12 Sep 2013 08:06:19 GMT (envelope-from syuu@FreeBSD.org) Date: Thu, 12 Sep 2013 08:06:19 GMT Message-Id: <201309120806.r8C86JLw083964@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to syuu@FreeBSD.org using -f From: syuu@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257234 - in soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb: . gpl include/hw MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Sep 2013 08:06:20 -0000 Author: syuu Date: Thu Sep 12 08:06:19 2013 New Revision: 257234 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257234 Log: USBBus handling fix, initializer for dev-hub Modified: soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/dev-hub.c soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/bus.c soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/desc.c soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/dev-serial.c soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/hcd-uhci.c soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/include/hw/usb.h Modified: soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/dev-hub.c ============================================================================== --- soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/dev-hub.c Thu Sep 12 02:31:32 2013 (r257233) +++ soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/dev-hub.c Thu Sep 12 08:06:19 2013 (r257234) @@ -605,3 +605,21 @@ type_init(usb_hub_register_types) */ + +USBDevice *usb_hub_init(USBBus *bus) +{ + USBDevice *dev; + char label[32]; + static int index; + + snprintf(label, sizeof(label), "usbhub%d", index++); + + dev = usb_create(bus, "usb-hub", sizeof(USBHubState)); + if (!dev) { + return NULL; + } + + return dev; +} + + Modified: soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/bus.c ============================================================================== --- soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/bus.c Thu Sep 12 02:31:32 2013 (r257233) +++ soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/bus.c Thu Sep 12 08:06:19 2013 (r257234) @@ -10,6 +10,8 @@ #define trace_usb_port_claim(a, b) #define trace_usb_port_attach(a,b,c,d) +#define trace_usb_port_detach(a,b) +#define trace_usb_port_release(a,b) void pstrcpy(char *buf, int buf_size, const char *str) { @@ -192,6 +194,7 @@ klass->handle_data(dev, p); } } +#endif const char *usb_device_get_product_desc(USBDevice *dev) { @@ -208,6 +211,7 @@ return klass->usb_desc; } +#if 0 void usb_device_set_interface(USBDevice *dev, int interface, int alt_old, int alt_new) { @@ -234,7 +238,7 @@ } } -static int usb_qdev_init(USBDevice *dev) +int usb_qdev_init(USBDevice *dev) { int rc; @@ -303,6 +307,7 @@ USBDevice *dev; dev = (USBDevice *)calloc(1, len); + dev->bus = bus; strncpy(dev->name, name, sizeof(dev->name)); return dev; } @@ -430,7 +435,6 @@ return 0; } -#if 0 void usb_release_port(USBDevice *dev) { USBBus *bus = usb_bus_from_device(dev); @@ -448,7 +452,6 @@ QTAILQ_INSERT_TAIL(&bus->free, port, next); bus->nfree++; } -#endif static void usb_mask_to_str(char *dest, size_t size, unsigned int speedmask) @@ -500,10 +503,9 @@ return 0; } -#if 0 int usb_device_detach(USBDevice *dev) { - USBBus *bus = usb_bus_from_device(dev); +// USBBus *bus = usb_bus_from_device(dev); USBPort *port = dev->port; assert(port != NULL); @@ -515,6 +517,7 @@ return 0; } +#if 0 int usb_device_delete_addr(int busnr, int addr) { USBBus *bus; Modified: soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/desc.c ============================================================================== --- soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/desc.c Thu Sep 12 02:31:32 2013 (r257233) +++ soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/desc.c Thu Sep 12 08:06:19 2013 (r257234) @@ -18,11 +18,6 @@ #define trace_usb_set_interface(a,b,c,d) #define trace_usb_desc_bos(a,b,c) -const USBDesc *usb_device_get_usb_desc(USBDevice *dev) -{ - return NULL; -} - void usb_device_set_interface(USBDevice *dev, int interface, int alt_old, int alt_new) { @@ -587,9 +582,9 @@ // DeviceState *hcd = dev->qdev.parent_bus->parent; const USBDesc *desc = usb_device_get_usb_desc(dev); int index = desc->id.iSerialNumber; - char serial[64]; - char *path = NULL; - int dst; +// char serial[64]; +// char *path = NULL; +// int dst; if (dev->serial) { /* 'serial' usb bus property has priority if present */ @@ -598,6 +593,7 @@ } assert(index != 0 && desc->str[index] != NULL); +#if 0 dst = snprintf(serial, sizeof(serial), "%s", desc->str[index]); // path = qdev_get_dev_path(hcd); if (path) { @@ -605,6 +601,7 @@ } dst += snprintf(serial+dst, sizeof(serial)-dst, "-%s", dev->port->path); usb_desc_set_string(dev, index, serial); +#endif } const char *usb_desc_get_string(USBDevice *dev, uint8_t index) Modified: soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/dev-serial.c ============================================================================== --- soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/dev-serial.c Thu Sep 12 02:31:32 2013 (r257233) +++ soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/gpl/dev-serial.c Thu Sep 12 08:06:19 2013 (r257234) @@ -498,7 +498,7 @@ } } -int usb_serial_initfn(USBDevice *dev) +static int usb_serial_initfn(USBDevice *dev) { USBSerialState *s = DO_UPCAST(USBSerialState, dev, dev); @@ -611,7 +611,7 @@ }; #endif -static void usb_serial_class_initfn(USBDeviceClass *uc, void *data) +void usb_serial_class_initfn(USBDeviceClass *uc, void *data) { uc->init = usb_serial_initfn; uc->product_desc = "QEMU USB Serial"; Modified: soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/hcd-uhci.c ============================================================================== --- soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/hcd-uhci.c Thu Sep 12 02:31:32 2013 (r257233) +++ soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/hcd-uhci.c Thu Sep 12 08:06:19 2013 (r257234) @@ -361,6 +361,8 @@ struct timespec ts; ts.tv_sec = ns / SECINNS; ts.tv_nsec = ns % SECINNS; + fprintf(usblog, "%s:%d tv_sec:%lu tv_nsec:%lu\n", + __func__, __LINE__, ts.tv_sec, ts.tv_nsec); return ts; } @@ -397,7 +399,8 @@ timer->se.sigev_notify_function = timer_handler; timer->func = func; timer->arg = arg; - if (timer_create(CLOCK_REALTIME, &timer->se, &timer->timerid)) { + fprintf(usblog, "%s:%d timer:%p\n", __func__, __LINE__, timer); + if (timer_create(CLOCK_MONOTONIC, &timer->se, &timer->timerid)) { perror("timer_create"); exit(1); } @@ -408,6 +411,7 @@ { struct itimerspec its; + fprintf(usblog, "%s:%d timer:%p ns:%ld\n", __func__, __LINE__, timer, ns); its.it_value = its.it_interval = ns_to_timerspec(ns); timer_settime(timer->timerid, 0, &its, 0); } @@ -418,6 +422,7 @@ memset(&its, 0, sizeof(its)); timer_settime(timer->timerid, 0, &its, 0); + fprintf(usblog, "%s:%d timer:%p\n", __func__, __LINE__, timer); } static inline int32_t uhci_queue_token(UHCI_TD *td) @@ -667,6 +672,7 @@ if (version_id < 2) { s->expire_time = get_clock_ns() + (get_ticks_per_sec() / FRAME_TIMER_FREQ); + fprintf(usblog, "%s s->expire_time:%ld\n", __func__, s->expire_time); } return 0; } @@ -713,7 +719,9 @@ trace_usb_uhci_schedule_start(); s->expire_time = get_clock_ns() + (get_ticks_per_sec() / FRAME_TIMER_FREQ); - mod_timer(s->frame_timer, s->expire_time); + fprintf(usblog, "%s s->expire_time:%ld\n", __func__, s->expire_time); +// mod_timer(s->frame_timer, s->expire_time); + mod_timer(s->frame_timer, get_ticks_per_sec() / FRAME_TIMER_FREQ); s->status &= ~UHCI_STS_HCHALTED; fprintf(usblog, "%s status &= ~UHCI_STS_HCHALTED\n", __func__); fprintf(usblog, "%s status = %x\n", __func__, s->status); @@ -975,28 +983,41 @@ switch (status) { case USB_RET_NAK: + fprintf(usblog, "%s:%d USB_RET_NAK\n", __func__, __LINE__); td->ctrl |= TD_CTRL_NAK; + fprintf(usblog, "%s:%d TD_RESULT_NEXT_QH\n", __func__, __LINE__); return TD_RESULT_NEXT_QH; case USB_RET_STALL: + fprintf(usblog, "%s:%d USB_RET_STALL\n", __func__, __LINE__); td->ctrl |= TD_CTRL_STALL; trace_usb_uhci_packet_complete_stall(queue_token, td_addr); + fprintf(usblog, "%s:%d TD_RESULT_NEXT_QH\n", __func__, __LINE__); ret = TD_RESULT_NEXT_QH; break; case USB_RET_BABBLE: + fprintf(usblog, "%s:%d USB_RET_BABBLE\n", __func__, __LINE__); td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL; /* frame interrupted */ trace_usb_uhci_packet_complete_babble(queue_token, td_addr); + fprintf(usblog, "%s:%d TD_RESULT_STOP_FRAME\n", __func__, __LINE__); ret = TD_RESULT_STOP_FRAME; break; case USB_RET_IOERROR: case USB_RET_NODEV: default: + if (status == USB_RET_IOERROR) + fprintf(usblog, "%s:%d USB_RET_IOERROR\n", __func__, __LINE__); + else if (status == USB_RET_NODEV) + fprintf(usblog, "%s:%d USB_RET_NODEV\n", __func__, __LINE__); + else + fprintf(usblog, "%s:%d invalid\n", __func__, __LINE__); td->ctrl |= TD_CTRL_TIMEOUT; td->ctrl &= ~(3 << TD_CTRL_ERROR_SHIFT); trace_usb_uhci_packet_complete_error(queue_token, td_addr); + fprintf(usblog, "%s:%d TD_RESULT_NEXT_QH\n", __func__, __LINE__); ret = TD_RESULT_NEXT_QH; break; } @@ -1045,6 +1066,7 @@ /* short packet: do not update QH */ trace_usb_uhci_packet_complete_shortxfer(async->queue->token, async->td_addr); + fprintf(usblog, "%s:%d TD_RESULT_NEXT_QH\n", __func__, __LINE__); return TD_RESULT_NEXT_QH; } } @@ -1052,6 +1074,7 @@ /* success */ trace_usb_uhci_packet_complete_success(async->queue->token, async->td_addr); + fprintf(usblog, "%s:%d TD_RESULT_COMPLETE\n", __func__, __LINE__); return TD_RESULT_COMPLETE; } @@ -1099,6 +1122,7 @@ if (td->ctrl & TD_CTRL_IOC) { *int_mask |= 0x01; } + fprintf(usblog, "%s:%d TD_RESULT_NEXT_QH\n", __func__, __LINE__); return TD_RESULT_NEXT_QH; } @@ -1107,6 +1131,7 @@ /* we are busy filling the queue, we are not prepared to consume completed packages then, just leave them in async state */ + fprintf(usblog, "%s:%d TD_RESULT_ASYNC_CONT\n", __func__, __LINE__); return TD_RESULT_ASYNC_CONT; } if (!async->done) { @@ -1120,6 +1145,7 @@ uhci_read_td(s, &last_td, last->td_addr); uhci_queue_fill(async->queue, &last_td); + fprintf(usblog, "%s:%d TD_RESULT_ASYNC_CONT\n", __func__, __LINE__); return TD_RESULT_ASYNC_CONT; } uhci_async_unlink(async); @@ -1127,6 +1153,7 @@ } if (s->completions_only) { + fprintf(usblog, "%s:%d TD_RESULT_ASYNC_CONT\n", __func__, __LINE__); return TD_RESULT_ASYNC_CONT; } @@ -1157,6 +1184,7 @@ switch(pid) { case USB_TOKEN_OUT: case USB_TOKEN_SETUP: + fprintf(usblog, "%s:%d %s\n", __func__, __LINE__, pid == USB_TOKEN_OUT ? "USB_TOKEN_OUT" : "USB_TOKEN_SETUP"); pci_dma_read(STATE_TO_SC(s), td->buffer, async->buf, max_len); usb_handle_packet(q->ep->dev, &async->packet); if (async->packet.status == USB_RET_SUCCESS) { @@ -1165,16 +1193,19 @@ break; case USB_TOKEN_IN: + fprintf(usblog, "%s:%d USB_TOKEN_IN\n", __func__, __LINE__); usb_handle_packet(q->ep->dev, &async->packet); break; default: + fprintf(usblog, "%s:%d invalid\n", __func__, __LINE__); /* invalid pid : frame interrupted */ uhci_async_free(async); s->status |= UHCI_STS_HCPERR; fprintf(usblog, "%s s->status |= UHCI_STS_USBERR\n", __func__); fprintf(usblog, "%s s->status = %x\n", __func__, s->status); uhci_update_irq(s); + fprintf(usblog, "%s:%d TD_RESULT_STOP_FRAME\n", __func__, __LINE__); return TD_RESULT_STOP_FRAME; } @@ -1183,6 +1214,7 @@ if (!queuing) { uhci_queue_fill(q, td); } + fprintf(usblog, "%s:%d TD_RESULT_ASYNC_START\n", __func__, __LINE__); return TD_RESULT_ASYNC_START; } @@ -1287,6 +1319,7 @@ UHCI_QH qh; QhDb qhdb; + fprintf(usblog, "%s:%d s:%p\n", __func__, __LINE__, s); frame_addr = s->fl_base_addr + ((s->frnum & 0x3ff) << 2); pci_dma_read(STATE_TO_SC(s), frame_addr, &link, 4); @@ -1298,6 +1331,7 @@ qhdb_reset(&qhdb); for (cnt = FRAME_MAX_LOOPS; is_valid(link) && cnt; cnt--) { + fprintf(usblog, "%s:%d cnt:%d is_valid(link):%d is_qh(link):%d\n", __func__, __LINE__, cnt, is_valid(link), is_qh(link)); if (!s->completions_only && s->frame_bytes >= s->frame_bandwidth) { /* We've reached the usb 1.1 bandwidth, which is 1280 bytes/frame, stop processing */ @@ -1357,20 +1391,24 @@ switch (ret) { case TD_RESULT_STOP_FRAME: /* interrupted frame */ + fprintf(usblog, "%s:%d TD_RESULT_STOP_FRAME\n", __func__, __LINE__); goto out; case TD_RESULT_NEXT_QH: case TD_RESULT_ASYNC_CONT: + fprintf(usblog, "%s:%d %s\n", __func__, __LINE__, ret == TD_RESULT_NEXT_QH ? "TD_RESULT_NEXT_QH" : "TD_RESULT_ASYNC_CONT"); trace_usb_uhci_td_nextqh(curr_qh & ~0xf, link & ~0xf); link = curr_qh ? qh.link : td.link; continue; case TD_RESULT_ASYNC_START: + fprintf(usblog, "%s:%d TD_RESULT_ASYNC_START\n", __func__, __LINE__); trace_usb_uhci_td_async(curr_qh & ~0xf, link & ~0xf); link = curr_qh ? qh.link : td.link; continue; case TD_RESULT_COMPLETE: + fprintf(usblog, "%s:%d TD_RESULT_COMPLETE\n", __func__, __LINE__); trace_usb_uhci_td_complete(curr_qh & ~0xf, link & ~0xf); link = td.link; td_count++; @@ -1435,9 +1473,11 @@ /* Process up to MAX_FRAMES_PER_TICK frames */ frames = (t_now - t_last_run) / frame_t; + fprintf(usblog, "%s:%d frame_t:%ld s->expire_time:%ld t_last_run:%ld t_now:%ld frames:%d\n", __func__, __LINE__, frame_t, s->expire_time, t_last_run, t_now, frames); if (frames > s->maxframes) { int skipped = frames - s->maxframes; s->expire_time += skipped * frame_t; + fprintf(usblog, "%s s->expire_time:%ld\n", __func__, s->expire_time); s->frnum = (s->frnum + skipped) & 0x7ff; frames -= skipped; } @@ -1446,6 +1486,7 @@ } for (i = 0; i < frames; i++) { + fprintf(usblog, "%s:%d %d\n", __func__, __LINE__, i); s->frame_bytes = 0; trace_usb_uhci_frame_start(s->frnum); uhci_async_validate_begin(s); @@ -1455,6 +1496,7 @@ * the guest must look at frnum - 1 on interrupt, so inc frnum now */ s->frnum = (s->frnum + 1) & 0x7ff; s->expire_time += frame_t; + fprintf(usblog, "%s s->expire_time:%ld\n", __func__, s->expire_time); } /* Complete the previous frame(s) */ @@ -1467,7 +1509,7 @@ } s->pending_int_mask = 0; - mod_timer(s->frame_timer, t_now + frame_t); +// mod_timer(s->frame_timer, t_now + frame_t); } /* @@ -1702,8 +1744,11 @@ return (value); } +extern int usb_qdev_init(USBDevice *dev); extern USBDevice *usb_serial_init(USBBus *bus /*, const char *filename */); -extern int usb_serial_initfn(USBDevice *dev); +extern void usb_serial_class_initfn(USBDeviceClass *uc, void *data); +extern USBDevice *usb_hub_init(USBBus *bus); +void usb_hub_class_initfn(USBDeviceClass *uc, void *data); static int pci_uhci_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) { @@ -1764,8 +1809,14 @@ pci_emul_alloc_bar(pi, 4, PCIBAR_IO, 0x20); { + USBDevice *dev = usb_hub_init(&sc->sc_st.bus); + usb_hub_class_initfn(&dev->klass, NULL); + usb_qdev_init(dev); + } + { USBDevice *dev = usb_serial_init(&sc->sc_st.bus); - usb_serial_initfn(dev); + usb_serial_class_initfn(&dev->klass, NULL); + usb_qdev_init(dev); } return (0); Modified: soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/include/hw/usb.h ============================================================================== --- soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/include/hw/usb.h Thu Sep 12 02:31:32 2013 (r257233) +++ soc2013/syuu/bhyve_usb/usr.sbin/bhyve/usb/include/hw/usb.h Thu Sep 12 08:06:19 2013 (r257234) @@ -294,6 +294,7 @@ /* definition of a USB device */ struct USBDevice { + USBBus *bus; // DeviceState qdev; USBDeviceClass klass; USBPort *port; @@ -546,7 +547,7 @@ static inline USBBus *usb_bus_from_device(USBDevice *d) { // return DO_UPCAST(USBBus, qbus, d->qdev.parent_bus); - return NULL; + return d->bus; } //extern const VMStateDescription vmstate_usb_device; From owner-svn-soc-all@FreeBSD.ORG Thu Sep 12 14:41:21 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 16DF9F54 for ; Thu, 12 Sep 2013 14:41:21 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0262727BC for ; Thu, 12 Sep 2013 14:41:21 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8CEfKaR003618 for ; Thu, 12 Sep 2013 14:41:20 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8CEfKBm003583 for svn-soc-all@FreeBSD.org; Thu, 12 Sep 2013 14:41:20 GMT (envelope-from dpl@FreeBSD.org) Date: Thu, 12 Sep 2013 14:41:20 GMT Message-Id: <201309121441.r8CEfKBm003583@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257236 - in soc2013/dpl/head/lib/libzcap: . test zlibworker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Sep 2013 14:41:21 -0000 Author: dpl Date: Thu Sep 12 14:41:20 2013 New Revision: 257236 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257236 Log: Update. Modified: soc2013/dpl/head/lib/libzcap/capsicum.c soc2013/dpl/head/lib/libzcap/commands.c soc2013/dpl/head/lib/libzcap/commands.h soc2013/dpl/head/lib/libzcap/deflate.c soc2013/dpl/head/lib/libzcap/gzlib.c soc2013/dpl/head/lib/libzcap/test/testlib.sh soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c soc2013/dpl/head/lib/libzcap/zlibworker/commands.c soc2013/dpl/head/lib/libzcap/zlibworker/commands.h soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Modified: soc2013/dpl/head/lib/libzcap/capsicum.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.c Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/capsicum.c Thu Sep 12 14:41:20 2013 (r257236) @@ -46,19 +46,6 @@ /* At "debug.h" */ extern int DEBUG_ZCAP; -static void -limitfd(int fd, unsigned long long cap) -{ - cap_rights_t rights; - - cap_rights_init(&rights); - cap_rights_set(&rights, cap); - - if (cap_rights_limit(fd, &rights) < 0 && errno != ENOSYS) - err(1, "Couldn't limit fd: %d\n", fd); -} - - /* * This function should be called only by: * gzopen(), deflateInit(), inflateInit(), @@ -101,13 +88,11 @@ startNullSandbox(void) { struct sandbox *newsandbox; - if (DEBUG_ZCAP) - printf("DEBUG: Starting NULL sandbox\n"); if (!slist_initiated) { SLIST_INIT(&sandboxes); - /* Here we add a sandbox used for non-structure related stuff */ + /* Here we add a sandbox used for not structure-related stuff */ /* This will be the first sandbox always */ if (SLIST_EMPTY(&sandboxes)) { newsandbox = startChild(NULL); @@ -118,9 +103,8 @@ } /* - * Finds the struct sandbox for - * a pointer to the data structure - * the sandbox is related to. + * Finds the struct sandbox for a pointer to the + * data structure the sandbox is related to. */ struct sandbox * findSandbox(void *ptr) @@ -141,7 +125,7 @@ struct sandbox * startChild(void *data) { - int procd, sv[2]; + int procd, pid, sv[2]; struct sandbox *newsandbox; if ((newsandbox = malloc(sizeof (struct sandbox))) == NULL) @@ -149,60 +133,61 @@ sv[0] = sv[1] = 0; if (socketpair(PF_LOCAL, SOCK_STREAM, 0, sv) < 0 ) - perror("zcaplib: socketpair()"); - if (DEBUG_ZCAP) - printf("DEBUG: Called socketpair(): sv[0]: %d, sv[1]: %d\n", sv[0], sv[1]); + err(1, "zcaplib: socketpair()"); - procd = pdfork(&procd, 0); - if (procd == 0 ) { - /* Sandbox the process */ - if (cap_enter() < 0) - err(1, "Couldn't enter capability mode"); - - if (DEBUG_ZCAP) - printf("DEBUG: STDIN_FILENO: %d\n", STDIN_FILENO); - - limitfd(STDIN_FILENO, CAP_READ); - limitfd(STDOUT_FILENO, CAP_WRITE|CAP_FSTAT); - limitfd(STDERR_FILENO, CAP_WRITE); + pid = pdfork(&procd, 0); + if (pid == 0 ) { + cap_rights_t stdin_cap; + cap_rights_t stdout_cap; + cap_rights_t stderr_cap; + cap_rights_t socket_cap; + + cap_rights_init(&stdin_cap, CAP_READ); + cap_rights_init(&stderr_cap, CAP_WRITE, CAP_FSTAT); + cap_rights_init(&stdout_cap, CAP_WRITE); if (dup2(sv[0], 3) != 3) err(1, "Couldn't duplicate fd"); closefrom(4); - limitfd(3, CAP_WRITE|CAP_READ|CAP_POLL_EVENT); + cap_rights_init(&socket_cap, CAP_WRITE, CAP_READ, CAP_POLL_EVENT); + + if (cap_rights_limit(STDIN_FILENO, &stdin_cap) < 0) + err(1, "Couldn't limit stdin"); + if (cap_rights_limit(STDOUT_FILENO, &stdout_cap) < 0) + err(1, "Couldn't limit stdout"); + if (cap_rights_limit(STDERR_FILENO, &stderr_cap) < 0) + err(1, "Couldn't limit stderr"); + if (cap_rights_limit(3, &socket_cap) < 0) + err(1, "Couldn't limit sandbox socket"); /* execl() zlibworker */ if ( execl("/usr/libexec/zlibworker", "zlibworker", NULL) < 0) err(1, "Couldn't find zlibworker."); exit(0); - } else if (procd == -1) { + } else if (pid == -1) { err(1, "Couldn't fork"); } else { - if ( DEBUG_ZCAP ) - printf("DEBUG: Done forking: %d\n", procd); - signal(SIGCHLD, suicide); atexit(killChild); newsandbox->dataptr = data; newsandbox->pd = procd; - newsandbox->socket = sv[0]; - if (DEBUG_ZCAP) + newsandbox->socket = sv[1]; + if (DEBUG_ZCAP) { printf("DEBUG: We have started a new sandbox.\n"); printf("\tpd: %d, socket: %d\n", newsandbox->pd, newsandbox->socket); + } } return (newsandbox); } void killChild(void) { - int pid; struct sandbox *box; /* Kill all sandboxes. */ SLIST_FOREACH(box, &sandboxes, next) - if (pdgetpid(box->pd, &pid) > 0) - kill(SIGKILL, pid); + pdkill(box->pd, SIGKILL); } void suicide(int signal) { kill(getpid(), SIGKILL); @@ -216,11 +201,9 @@ struct sandbox *box; box = findSandbox(ptr); - if (DEBUG_ZCAP) - printf("DEBUG: Sending command to %d sandbox\n", box->pd); if( nvlist_send(box->socket, nvl) != 0 ) - err(1, "zcaplib: nvlist_send() Went wrong"); + err(1, "zcaplib: nvlist_send Error"); if ((new = nvlist_recv(box->socket)) == NULL) err(1, "nvlist_recv(): nvlist_t is NULL"); return (new); Modified: soc2013/dpl/head/lib/libzcap/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/commands.c Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/commands.c Thu Sep 12 14:41:20 2013 (r257236) @@ -6,6 +6,7 @@ #include "commands.h" #include "capsicum.h" +#include #include #include #include @@ -134,15 +135,14 @@ nvlist_add_nvlist(nvl, "args", args); result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); /* * We get the "good" struct from the worker. - * Here we have the good internal_state. * When we work on the data now, we have to pass * it in buffers, and sync next_in, avail_in, total_in, * next_out, avail_out and total_out. */ - newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); const char *msg = dnvlist_get_string(result, "msg", NULL); if (msg != NULL) @@ -165,8 +165,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); /* Supposing there's already space reserved for z_stream */ memcpy(strm, newstrm, zstreamsize); destroy(); @@ -187,8 +187,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, NULL); if (newstrm != NULL) memcpy(strm, newstrm, zstreamsize); else @@ -218,8 +218,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, NULL); if (newstrm != NULL) memcpy(strm, newstrm, zstreamsize); msg = dnvlist_get_string(result, "msg", NULL); @@ -242,8 +242,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); /* Supposing there's already space reserved for z_stream */ memcpy(strm, newstrm, zstreamsize); destroy(); @@ -264,8 +264,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, NULL); if (newstrm != NULL) memcpy(strm, newstrm, zstreamsize); destroy(); @@ -289,8 +289,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -311,8 +311,8 @@ /* The dest z_streamp is copied at its sandbox. */ result = sendCommand(nvl, dest); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(dest, newstrm, zstreamsize); destroy(); return(ret); @@ -331,9 +331,9 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); /* Save the reseted strm. */ - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); const char *msg = dnvlist_get_string(result, "msg", NULL); memcpy(strm->msg, msg, strlen(msg)+1); @@ -356,9 +356,9 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); /* Overwrite the old streamp */ - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -382,8 +382,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -403,8 +403,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -426,8 +426,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -448,8 +448,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -473,8 +473,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -494,8 +494,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -515,8 +515,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -535,8 +535,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -558,8 +558,8 @@ /* XXX - There's a problem with this, we can't copy internat_state */ result = sendCommand(nvl, dest); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(dest, newstrm, zstreamsize); destroy(); return(ret); @@ -578,8 +578,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); const char *msg = dnvlist_get_string(result, "msg", NULL); memcpy(strm->msg, msg, strlen(msg)+1); @@ -601,8 +601,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); const char *msg = dnvlist_get_string(result, "msg", NULL); memcpy(strm->msg, msg, strlen(msg)+1); @@ -625,8 +625,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -645,8 +645,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -667,10 +667,10 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); - gz_headerp newhead = (gz_headerp)dnvlist_get_binary(result, "newhead", gzheadersize, NULL, sizeof(NULL)); + gz_headerp newhead = (gz_headerp)nvlist_get_binary(result, "newhead", gzheadersize); head->done = newhead->done; destroy(); return(ret); @@ -692,8 +692,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); const char *msg = dnvlist_get_string(result, "msg", NULL); memcpy(strm->msg, msg, strlen(msg)+1); @@ -715,8 +715,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -735,8 +735,8 @@ result = sendCommand(nvl, strm); - ret = dnvlist_get_number(result, "result", NULL); - const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); + ret = nvlist_get_number(result, "result"); + const z_stream *newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); memcpy(strm, newstrm, zstreamsize); destroy(); return(ret); @@ -754,7 +754,7 @@ result = sendCommand(nvl, NULL); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -772,7 +772,7 @@ nvlist_add_nvlist(nvl, "args", args); result = sendCommand(nvl, NULL); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -781,8 +781,8 @@ gzFile zcapcmd_gzopen(int fd, const char *mode) { - gzFile *fileptr; gzFile file; + const void *ptr; initNvl(); startSandbox(file); @@ -794,12 +794,11 @@ result = sendCommand(nvl, file); - fileptr = (gzFile *)dnvlist_get_binary(result, "result", &gzfilesize, NULL, sizeof(NULL)); - file = *fileptr; + if ((file = malloc(gzfilesize)) == NULL) + err(1, "malloc"); + memcpy(file, ptr, gzfilesize); destroy(); - fprintf(stderr, "zcaplib: after zcapcmd_gzopen: fileptr: %p *fileprt: %p\n", fileptr, *fileptr); - fprintf(stderr, "zcaplib: after zcapcmd_gzopen: file: %p\n", file); - return((gzFile)file); + return(file); } int @@ -815,7 +814,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -834,7 +833,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -853,8 +852,8 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); - data = dnvlist_get_binary(result, "data", len, NULL, sizeof(NULL)); + int ret = nvlist_get_number(result, "result"); + data = nvlist_get_binary(result, "data", len); memcpy(buf, data, (size_t)len); destroy(); return(ret); @@ -873,7 +872,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -890,7 +889,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -908,7 +907,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -948,7 +947,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -966,7 +965,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -984,7 +983,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -1003,7 +1002,7 @@ result = sendCommand(nvl, file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return ((z_off_t)ret); } @@ -1015,7 +1014,6 @@ int zcapcmd_simplecommand(gzFile file, int command) { - initNvl(); nvlist_add_number(nvl, "command", command); @@ -1024,8 +1022,11 @@ nvlist_add_nvlist(nvl, "args", args); result = sendCommand(nvl, file); + if (command == ZCAPCMD_GZCLOSE_W || command == ZCAPCMD_GZCLOSE_R) + /* file is not anymore needed */ + free(file); - int ret = dnvlist_get_number(result, "result", NULL); + int ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -1033,7 +1034,9 @@ const char * zcapcmd_gzerror(gzFile file, int *errnum) { - + const char *ptr; + const char *ret; + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTC); @@ -1042,9 +1045,11 @@ result = sendCommand(nvl, file); - /* XXX: Should I malloc space for this? */ - const char * ret = dnvlist_get_string(result, "result", NULL); - *errnum = dnvlist_get_number(result, "zerrno", NULL); + ptr = nvlist_get_string(result, "result"); + *errnum = nvlist_get_number(result, "zerrno"); + + ret = malloc(sizeof(*ptr)); + memcpy((void *)ret, (void *)ptr, sizeof(*ptr)); destroy(); return(ret); } @@ -1065,7 +1070,7 @@ result = sendCommand(nvl, NULL); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -1085,7 +1090,7 @@ result = sendCommand(nvl, NULL); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -1105,7 +1110,7 @@ result = sendCommand(nvl, NULL); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); destroy(); return(ret); } @@ -1124,7 +1129,7 @@ nvlist_add_nvlist(nvl, "args", args); result = sendCommand(nvl, NULL); - ret = dnvlist_get_number(result, "result", NULL); + ret = nvlist_get_number(result, "result"); destroy(); return(ret); } \ No newline at end of file Modified: soc2013/dpl/head/lib/libzcap/commands.h ============================================================================== --- soc2013/dpl/head/lib/libzcap/commands.h Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/commands.h Thu Sep 12 14:41:20 2013 (r257236) @@ -69,14 +69,13 @@ #define ZCAPCMD_GZOFFSET 54 #define ZCAPCMD_GZEOF 55 #define ZCAPCMD_GZDIRECT 56 -#define ZCAPCMD_GZCLOSE 57 -#define ZCAPCMD_GZCLOSE_R 58 -#define ZCAPCMD_GZCLOSE_W 59 -#define ZCAPCMD_GZERROR 60 -#define ZCAPCMD_GZCLEARERR 61 +#define ZCAPCMD_GZCLOSE_R 57 +#define ZCAPCMD_GZCLOSE_W 58 +#define ZCAPCMD_GZERROR 59 +#define ZCAPCMD_GZCLEARERR 60 /* checksum functions */ -#define ZCAPCMD_ADLER32 62 -#define ZCAPCMD_ADLER32_COMBINE 63 -#define ZCAPCMD_CRC32 64 -#define ZCAPCMD_CRC32_COMBINE 65 +#define ZCAPCMD_ADLER32 61 +#define ZCAPCMD_ADLER32_COMBINE 62 +#define ZCAPCMD_CRC32 63 +#define ZCAPCMD_CRC32_COMBINE 64 Modified: soc2013/dpl/head/lib/libzcap/deflate.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/deflate.c Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/deflate.c Thu Sep 12 14:41:20 2013 (r257236) @@ -36,7 +36,7 @@ const char *version; int stream_size; { - /* The other process can't use this process functions. */ + /* zlibworker can't use this process functions. */ strm->zalloc = Z_NULL; strm->zfree = Z_NULL; strm->opaque = Z_NULL; Modified: soc2013/dpl/head/lib/libzcap/gzlib.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/gzlib.c Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/gzlib.c Thu Sep 12 14:41:20 2013 (r257236) @@ -7,6 +7,8 @@ #include +#include + #include "gzguts.h" #include "zutil.h" #include "commands.h" @@ -30,6 +32,7 @@ int oflag = 0; int fd; char *loopmode; + cap_rights_t rights; strncpy(loopmode, mode, strlen(mode)+1); while(*loopmode) { @@ -65,19 +68,16 @@ ++loopmode; } - if ((fd = open(path, oflag)) < 0) { - perror("zcaplib: Couldn't create gzip file"); - abort(); - } + if ((fd = open(path, oflag)) < 0) + err(1, "zcaplib: Couldn't create gzip file"); + + cap_rights_init(&rights, CAP_READ, CAP_SEEK, CAP_WRITE, CAP_FSTAT, CAP_FCNTL); + if (cap_rights_limit(fd, &rights) < 0) + err(1, "zcaplib: Couldn't limit fd: %d", fd); + + if (cap_fcntls_limit(fd, CAP_FCNTL_GETFL) < 0) + err(1, "zcaplib: Couldn't limit fcntls of fd: %d", fd); - if (cap_rights_limit(fd, CAP_READ|CAP_SEEK|CAP_WRITE|CAP_FSTAT|CAP_FCNTL) < 0) { - perror("zcaplib: Couldn't limit fd"); - abort(); - } - if (cap_fcntls_limit(fd, CAP_FCNTL_GETFL) < 0) { - perror("zcaplib: Couldn't limit fd"); - abort(); - } return gzdopen(fd, mode); } @@ -104,6 +104,7 @@ gzFile file; unsigned size; { + fprintf(stderr, "Inside gzbuffer, calling zcapcmd_gzbuffer()"); return zcapcmd_gzbuffer(file, size); } Modified: soc2013/dpl/head/lib/libzcap/test/testlib.sh ============================================================================== --- soc2013/dpl/head/lib/libzcap/test/testlib.sh Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/test/testlib.sh Thu Sep 12 14:41:20 2013 (r257236) @@ -8,9 +8,4 @@ echo 'Done compiling library and tester.' echo -if [ $1 = "-k" ] -then - ktrace -i ./zcaplibtest -else - ./zcaplibtest -fi +sudo ktrace -i ./zcaplibtest Modified: soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c Thu Sep 12 14:41:20 2013 (r257236) @@ -82,19 +82,23 @@ testzlibVersion(void) { const char *str = NULL; + str = zlibVersion(); if (str == NULL) - printf("zlibversiion(): Error\n"); - + printf("zlibversion(): Error\n"); + printf("zlibVersion: %s\n", str); } /* Basic functions */ void testdeflateInit(z_streamp strm) { - int ret = deflateInit(strm, Z_DEFAULT_COMPRESSION); + int ret; + + ret = deflateInit(strm, Z_DEFAULT_COMPRESSION); if (strm->state == NULL || ret != 0) printf("deflateInit(): Error: %d\n", ret); + printf("deflateInit: %d\n", ret); } void @@ -106,17 +110,23 @@ void testdeflateEnd(z_streamp strm) { - int ret = deflateEnd(strm); - if (strm->state != Z_NULL || ret != 0) + int ret; + + ret = deflateEnd(strm); + if (strm->state != NULL || ret != 0) printf("deflateEnd(): Error: %d\n", ret); + printf("deflateEnd: %d\n", ret); } void testinflateInit(z_streamp strm) { - int ret = inflateInit(strm); + int ret; + + ret = inflateInit(strm); if (strm->state == NULL || ret != 0) printf("inflateInit(): Error: %d\n", ret); + printf("inflateInit: %d\n", ret); } void @@ -129,18 +139,24 @@ void testinflateEnd(z_streamp strm) { - int ret = inflateEnd(strm); + int ret; + + ret = inflateEnd(strm); if (strm->state != Z_NULL || ret != 0) printf("inflateEnd(): Error: %d\n", ret); + printf("inflateEnd: %d\n", ret); } /* Advanced functions */ void testzlibCompileFlags(void) { - uLong ret = zlibCompileFlags(); + uLong ret; + + ret = zlibCompileFlags(); if (ret == 0) printf("zlibCompileFlags(): Error: %lu\n", ret); + printf("zlibCompileFlags: %lu\n", ret); } /* Utility functions */ @@ -150,6 +166,7 @@ uLong ret = compressBound(10L); if (ret != 23) printf("compressBound(): Error: %lu\n", ret); + printf("compressBound: %lu\n", ret); } /* Gzip Functions */ @@ -157,11 +174,10 @@ testgzbasic(void) { gzFile file; - fprintf(stderr, "Starting testgzbasic\n"); - fprintf(stderr, "gzopen()\n"); file = gzopen(filename, "wb"); if (file == NULL) err(1, "Couldn't open %s to write", filename); + printf("gzopen: %p\n", file); fprintf(stderr, "gzbuffer()\n"); int ret = gzbuffer(file, 8192); Modified: soc2013/dpl/head/lib/libzcap/zlibworker/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Thu Sep 12 14:41:20 2013 (r257236) @@ -26,6 +26,7 @@ uLong ret = -1; z_streamp stream; z_streamp zstrmtemp; + /* We save the z_stream into memory. */ if ((stream = calloc(zstreamsize, 1)) == NULL) err(1, "deflateInit: Can't allocate memory"); @@ -249,11 +250,10 @@ * allocated memory to store the gzFile struct, we * only have to pass the pointer to this data. */ - fd = nvlist_get_descriptor(args, "fd"); + fd = nvlist_take_descriptor(args, "fd"); mode = nvlist_get_string(args, "mode"); ret = gzdopen(fd, mode); - fprintf(stderr, "zlibworker: gzopen: ret: %p\n", ret); nvlist_add_binary(result, "result", ret, gzsize); } Modified: soc2013/dpl/head/lib/libzcap/zlibworker/commands.h ============================================================================== --- soc2013/dpl/head/lib/libzcap/zlibworker/commands.h Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/zlibworker/commands.h Thu Sep 12 14:41:20 2013 (r257236) @@ -69,14 +69,13 @@ #define ZCAPCMD_GZOFFSET 54 #define ZCAPCMD_GZEOF 55 #define ZCAPCMD_GZDIRECT 56 -#define ZCAPCMD_GZCLOSE 57 -#define ZCAPCMD_GZCLOSE_R 58 -#define ZCAPCMD_GZCLOSE_W 59 -#define ZCAPCMD_GZERROR 60 -#define ZCAPCMD_GZCLEARERR 61 +#define ZCAPCMD_GZCLOSE_R 57 +#define ZCAPCMD_GZCLOSE_W 58 +#define ZCAPCMD_GZERROR 59 +#define ZCAPCMD_GZCLEARERR 60 /* checksum functions */ -#define ZCAPCMD_ADLER32 62 -#define ZCAPCMD_ADLER32_COMBINE 63 -#define ZCAPCMD_CRC32 64 -#define ZCAPCMD_CRC32_COMBINE 65 +#define ZCAPCMD_ADLER32 61 +#define ZCAPCMD_ADLER32_COMBINE 62 +#define ZCAPCMD_CRC32 63 +#define ZCAPCMD_CRC32_COMBINE 64 Modified: soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Thu Sep 12 10:39:38 2013 (r257235) +++ soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Thu Sep 12 14:41:20 2013 (r257236) @@ -103,6 +103,10 @@ { nvlist_t *nvl, *args, *result; + /* Sandbox the process */ + if (cap_enter() < 0) + err(1, "Couldn't enter capability mode"); + if ((data = calloc(5*1024, 1)) == NULL) err(1, "malloc\n"); @@ -110,18 +114,17 @@ if ((result = nvlist_create(0)) == NULL) err(1, "Can't create result.\n"); - if ((nvl = nvlist_recv(SOCKETFILENO)) != NULL) { - if (!nvlist_exists(nvl, "command")) - err(1, "No command.\n"); - - if (!nvlist_exists(nvl, "args")) - err(1, "args doesn't exist in nvlist\n"); - - if ((args = nvlist_take_nvlist(nvl, "args")) == NULL) - err(1, "couldn't take 'args' from nvlist\n"); - } else { + if ((nvl = nvlist_recv(SOCKETFILENO)) == NULL) err(1, "Received nvlist is NULL\n"); - } + + if (!nvlist_exists(nvl, "command")) + err(1, "No command.\n"); + + if (!nvlist_exists(nvl, "args")) + err(1, "args doesn't exist in nvlist\n"); + + if ((args = nvlist_take_nvlist(nvl, "args")) == NULL) + err(1, "couldn't take 'args' from nvlist\n"); // Switch for "command" // Get args, and call the real lib. From owner-svn-soc-all@FreeBSD.ORG Thu Sep 12 19:56:36 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B41CA2BE for ; Thu, 12 Sep 2013 19:56:36 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id A025A2305 for ; Thu, 12 Sep 2013 19:56:36 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8CJuaiG092779 for ; Thu, 12 Sep 2013 19:56:36 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8CJua6f092763 for svn-soc-all@FreeBSD.org; Thu, 12 Sep 2013 19:56:36 GMT (envelope-from dpl@FreeBSD.org) Date: Thu, 12 Sep 2013 19:56:36 GMT Message-Id: <201309121956.r8CJua6f092763@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257242 - in soc2013/dpl/head/lib/libzcap: . test zlibworker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Sep 2013 19:56:36 -0000 Author: dpl Date: Thu Sep 12 19:56:36 2013 New Revision: 257242 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257242 Log: Changed the open() arguments. Modified: soc2013/dpl/head/lib/libzcap/capsicum.c soc2013/dpl/head/lib/libzcap/commands.c soc2013/dpl/head/lib/libzcap/gzlib.c soc2013/dpl/head/lib/libzcap/test/testlib.sh soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Modified: soc2013/dpl/head/lib/libzcap/capsicum.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.c Thu Sep 12 18:08:25 2013 (r257241) +++ soc2013/dpl/head/lib/libzcap/capsicum.c Thu Sep 12 19:56:36 2013 (r257242) @@ -111,6 +111,8 @@ { struct sandbox *sandbox; + if (DEBUG_ZCAP) + printf("DEBUG: findSandbox(%p)\n", ptr); if (ptr == NULL) return (SLIST_FIRST(&sandboxes)); @@ -119,7 +121,7 @@ return (sandbox); /* Not found */ - return (NULL); + errx(1, "findSandbox: Couldn't find sandbox"); } struct sandbox * @@ -176,7 +178,7 @@ newsandbox->socket = sv[1]; if (DEBUG_ZCAP) { printf("DEBUG: We have started a new sandbox.\n"); - printf("\tpd: %d, socket: %d\n", newsandbox->pd, newsandbox->socket); + printf("\tdata: %p pd: %d, socket: %d\n", data, newsandbox->pd, newsandbox->socket); } } return (newsandbox); @@ -202,8 +204,14 @@ box = findSandbox(ptr); + if (DEBUG_ZCAP) + printf("DEBUG: zcaplib: Entered sendCommand(%p, %p): box: %p\n", nvl, ptr, box); + if (DEBUG_ZCAP) + printf("DEBUG: zcaplib: About to send command\n"); if( nvlist_send(box->socket, nvl) != 0 ) err(1, "zcaplib: nvlist_send Error"); + if (DEBUG_ZCAP) + printf("DEBUG: zcaplib: Awaiting command\n"); if ((new = nvlist_recv(box->socket)) == NULL) err(1, "nvlist_recv(): nvlist_t is NULL"); return (new); Modified: soc2013/dpl/head/lib/libzcap/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/commands.c Thu Sep 12 18:08:25 2013 (r257241) +++ soc2013/dpl/head/lib/libzcap/commands.c Thu Sep 12 19:56:36 2013 (r257242) @@ -784,6 +784,9 @@ gzFile file; const void *ptr; + if ((file = malloc(gzfilesize)) == NULL) + err(1, "malloc"); + initNvl(); startSandbox(file); @@ -794,8 +797,7 @@ result = sendCommand(nvl, file); - if ((file = malloc(gzfilesize)) == NULL) - err(1, "malloc"); + ptr = nvlist_get_binary(result, "result", gzfilesize); memcpy(file, ptr, gzfilesize); destroy(); return(file); Modified: soc2013/dpl/head/lib/libzcap/gzlib.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/gzlib.c Thu Sep 12 18:08:25 2013 (r257241) +++ soc2013/dpl/head/lib/libzcap/gzlib.c Thu Sep 12 19:56:36 2013 (r257242) @@ -8,22 +8,13 @@ #include #include +#include #include "gzguts.h" #include "zutil.h" #include "commands.h" #include "zconf.h" -#if defined(_WIN32) && !defined(__BORLANDC__) -# define LSEEK _lseeki64 -#else -#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 -# define LSEEK lseek64 -#else -# define LSEEK lseek -#endif -#endif - /* -- see zlib.h -- */ gzFile ZEXPORT gzopen(path, mode) const char *path; @@ -31,12 +22,13 @@ { int oflag = 0; int fd; - char *loopmode; + const char *loopmode; cap_rights_t rights; + mode_t mode2; - strncpy(loopmode, mode, strlen(mode)+1); + loopmode = mode; while(*loopmode) { - switch (*mode){ + switch (*loopmode){ #ifndef NO_GZCOMPRESS case('w'): oflag |= O_WRONLY|O_CREAT|O_TRUNC; @@ -68,9 +60,11 @@ ++loopmode; } - if ((fd = open(path, oflag)) < 0) + mode2 = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; + if ((fd = open(path, oflag, mode2)) < 0) err(1, "zcaplib: Couldn't create gzip file"); + //limitgzip(fd, mode); cap_rights_init(&rights, CAP_READ, CAP_SEEK, CAP_WRITE, CAP_FSTAT, CAP_FCNTL); if (cap_rights_limit(fd, &rights) < 0) err(1, "zcaplib: Couldn't limit fd: %d", fd); @@ -104,7 +98,6 @@ gzFile file; unsigned size; { - fprintf(stderr, "Inside gzbuffer, calling zcapcmd_gzbuffer()"); return zcapcmd_gzbuffer(file, size); } @@ -198,23 +191,3 @@ { zcapcmd_simplecommand(file, ZCAPCMD_GZCLEARERR); } - - -#ifndef INT_MAX -/* portably return maximum value for an int (when limits.h presumed not - available) -- we need to do this to cover cases where 2's complement not - used, since C standard permits 1's complement and sign-bit representations, - otherwise we could just use ((unsigned)-1) >> 1 */ -unsigned ZLIB_INTERNAL gz_intmax() -{ - unsigned p, q; - - p = 1; - do { - q = p; - p <<= 1; - p++; - } while (p > q); - return q >> 1; -} -#endif Modified: soc2013/dpl/head/lib/libzcap/test/testlib.sh ============================================================================== --- soc2013/dpl/head/lib/libzcap/test/testlib.sh Thu Sep 12 18:08:25 2013 (r257241) +++ soc2013/dpl/head/lib/libzcap/test/testlib.sh Thu Sep 12 19:56:36 2013 (r257242) @@ -1,11 +1,12 @@ #!/bin/sh -cd /usr/home/athos/gsoc/head/lib/libzcap/ -sudo make clean all install -cd /usr/home/athos/gsoc/head/lib/libzcap/test +cd .. +make clean all +sudo make install + +echo; echo +cd test cc -o zcaplibtest -g -Wall -fno-color-diagnostics -lnv -lzcap zcaplibtest.c echo; echo -echo 'Done compiling library and tester.' -echo -sudo ktrace -i ./zcaplibtest +ktrace -i ./zcaplibtest Modified: soc2013/dpl/head/lib/libzcap/zlibworker/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Thu Sep 12 18:08:25 2013 (r257241) +++ soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Thu Sep 12 19:56:36 2013 (r257242) @@ -79,7 +79,7 @@ z_streamp zstrmtemp; /* We save the z_stream into memory. */ if ((stream = malloc(zstreamsize)) == NULL) - err(1, "deflateInit: Can't allocate memory"); + err(1, "inflateInit: Can't allocate memory"); zstrmtemp = (z_streamp)nvlist_get_binary(args, "strm", &zstreamsize); memcpy(stream, zstrmtemp , zstreamsize); @@ -109,7 +109,7 @@ z_streamp zstrmtemp; /* We save the z_stream into memory. */ if ((stream = malloc(zstreamsize)) == NULL) - err(1, "deflateInit: Can't allocate memory"); + err(1, "inflateEnd: Can't allocate memory"); zstrmtemp = (z_streamp)nvlist_get_binary(args, "strm", &zstreamsize); memcpy(stream, zstrmtemp , zstreamsize); @@ -262,11 +262,14 @@ zcapcmd_gzbuffer(nvlist_t *args, nvlist_t *result) { int ret = -1; + gzFile file; + unsigned size; - ret = gzbuffer( - (gzFile)nvlist_get_binary(args, "file", &gzsize), - nvlist_get_number(args, "size") - ); + fprintf(stderr, "zlibworker: zcapcmd_gzbuffer(): Starts\n"); + file = (gzFile)nvlist_get_binary(args, "file", &gzsize); + size = nvlist_get_number(args, "size"); + + ret = gzbuffer(file, size); nvlist_add_number(result, "result", ret); } From owner-svn-soc-all@FreeBSD.ORG Thu Sep 12 21:28:09 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B603B10C for ; Thu, 12 Sep 2013 21:28:09 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 88B0428A9 for ; Thu, 12 Sep 2013 21:28:09 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8CLS9jh089722 for ; Thu, 12 Sep 2013 21:28:09 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8CLS9CM089716 for svn-soc-all@FreeBSD.org; Thu, 12 Sep 2013 21:28:09 GMT (envelope-from dpl@FreeBSD.org) Date: Thu, 12 Sep 2013 21:28:09 GMT Message-Id: <201309122128.r8CLS9CM089716@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257249 - soc2013/dpl/head/lib/libzcap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Sep 2013 21:28:09 -0000 Author: dpl Date: Thu Sep 12 21:28:09 2013 New Revision: 257249 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257249 Log: Limited fd of gzopen() depending on the mode. Modified: soc2013/dpl/head/lib/libzcap/gzlib.c Modified: soc2013/dpl/head/lib/libzcap/gzlib.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/gzlib.c Thu Sep 12 20:51:48 2013 (r257248) +++ soc2013/dpl/head/lib/libzcap/gzlib.c Thu Sep 12 21:28:09 2013 (r257249) @@ -15,6 +15,7 @@ #include "commands.h" #include "zconf.h" +static void limitgzip(int fd, const char *mode); /* -- see zlib.h -- */ gzFile ZEXPORT gzopen(path, mode) const char *path; @@ -23,7 +24,6 @@ int oflag = 0; int fd; const char *loopmode; - cap_rights_t rights; mode_t mode2; loopmode = mode; @@ -64,15 +64,51 @@ if ((fd = open(path, oflag, mode2)) < 0) err(1, "zcaplib: Couldn't create gzip file"); - //limitgzip(fd, mode); - cap_rights_init(&rights, CAP_READ, CAP_SEEK, CAP_WRITE, CAP_FSTAT, CAP_FCNTL); + limitgzip(fd, mode); + + return gzdopen(fd, mode); +} + +static void limitgzip(fd, mode) + int fd; + const char *mode; +{ + cap_rights_t rights; + const char *loopmode; + int capread, capwrite; + + capread = capwrite = 0; + + loopmode = mode; + while(*loopmode) { + switch (*loopmode){ +#ifndef NO_GZCOMPRESS + case('w'): + case('a'): + capwrite = 1; + break; +#endif + case('r'): + capread = 1; + break; + default: + ; + } + ++loopmode; + } + + if (capread == 1) + cap_rights_init(&rights, CAP_READ, CAP_SEEK, CAP_FSTAT, CAP_FCNTL); + + if (capwrite == 1) + cap_rights_init(&rights, CAP_WRITE, CAP_SEEK, CAP_FSTAT, CAP_FCNTL); + if (cap_rights_limit(fd, &rights) < 0) err(1, "zcaplib: Couldn't limit fd: %d", fd); if (cap_fcntls_limit(fd, CAP_FCNTL_GETFL) < 0) err(1, "zcaplib: Couldn't limit fcntls of fd: %d", fd); - return gzdopen(fd, mode); } /* -- see zlib.h -- */ From owner-svn-soc-all@FreeBSD.ORG Thu Sep 12 21:34:06 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 45B762E8 for ; Thu, 12 Sep 2013 21:34:06 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 17DE6290D for ; Thu, 12 Sep 2013 21:34:06 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8CLY5Dh037780 for ; Thu, 12 Sep 2013 21:34:05 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8CLY5u5037775 for svn-soc-all@FreeBSD.org; Thu, 12 Sep 2013 21:34:05 GMT (envelope-from dpl@FreeBSD.org) Date: Thu, 12 Sep 2013 21:34:05 GMT Message-Id: <201309122134.r8CLY5u5037775@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257250 - soc2013/dpl/head/lib/libzcap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Sep 2013 21:34:06 -0000 Author: dpl Date: Thu Sep 12 21:34:05 2013 New Revision: 257250 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257250 Log: Added debug. Added: soc2013/dpl/head/lib/libzcap/debug.h Added: soc2013/dpl/head/lib/libzcap/debug.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2013/dpl/head/lib/libzcap/debug.h Thu Sep 12 21:34:05 2013 (r257250) @@ -0,0 +1 @@ +int DEBUG_ZCAP = 1; From owner-svn-soc-all@FreeBSD.ORG Fri Sep 13 06:12:07 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id EA7B8677 for ; Fri, 13 Sep 2013 06:12:07 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BBE542982 for ; Fri, 13 Sep 2013 06:12:07 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8D6C7jZ088305 for ; Fri, 13 Sep 2013 06:12:07 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8D6C7D7088293 for svn-soc-all@FreeBSD.org; Fri, 13 Sep 2013 06:12:07 GMT (envelope-from dpl@FreeBSD.org) Date: Fri, 13 Sep 2013 06:12:07 GMT Message-Id: <201309130612.r8D6C7D7088293@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257258 - soc2013/dpl/libnv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Sep 2013 06:12:08 -0000 Author: dpl Date: Fri Sep 13 06:12:07 2013 New Revision: 257258 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257258 Log: Libnv not living here now. Deleted: soc2013/dpl/libnv/ From owner-svn-soc-all@FreeBSD.ORG Fri Sep 13 06:41:29 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 5C3E0D15 for ; Fri, 13 Sep 2013 06:41:29 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 47FC02AE4 for ; Fri, 13 Sep 2013 06:41:29 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8D6fTCs047771 for ; Fri, 13 Sep 2013 06:41:29 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8D6fTtk047766 for svn-soc-all@FreeBSD.org; Fri, 13 Sep 2013 06:41:29 GMT (envelope-from dpl@FreeBSD.org) Date: Fri, 13 Sep 2013 06:41:29 GMT Message-Id: <201309130641.r8D6fTtk047766@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257259 - soc2013/dpl/head/lib/libz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Sep 2013 06:41:29 -0000 Author: dpl Date: Fri Sep 13 06:41:29 2013 New Revision: 257259 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257259 Log: Deleted (for real) any traces of Capsicum here. Modified: soc2013/dpl/head/lib/libz/gzlib.c Modified: soc2013/dpl/head/lib/libz/gzlib.c ============================================================================== --- soc2013/dpl/head/lib/libz/gzlib.c Fri Sep 13 06:12:07 2013 (r257258) +++ soc2013/dpl/head/lib/libz/gzlib.c Fri Sep 13 06:41:29 2013 (r257259) @@ -251,9 +251,7 @@ free(state); return NULL; } -#ifdef CAPSICUM - cap_rights_limit(state->fd, CAP_READ|CAP_SEEK|CAP_WRITE|CAP_FSTAT); -#endif + if (state->mode == GZ_APPEND) state->mode = GZ_WRITE; /* simplify later checks */ From owner-svn-soc-all@FreeBSD.ORG Fri Sep 13 21:29:30 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 49D83980 for ; Fri, 13 Sep 2013 21:29:30 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 3530B25BC for ; Fri, 13 Sep 2013 21:29:30 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8DLTU5p086960 for ; Fri, 13 Sep 2013 21:29:30 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8DLTU4a086954 for svn-soc-all@FreeBSD.org; Fri, 13 Sep 2013 21:29:30 GMT (envelope-from dpl@FreeBSD.org) Date: Fri, 13 Sep 2013 21:29:30 GMT Message-Id: <201309132129.r8DLTU4a086954@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257283 - in soc2013/dpl/head/lib/libzcap: . test zlibworker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Sep 2013 21:29:30 -0000 Author: dpl Date: Fri Sep 13 21:29:29 2013 New Revision: 257283 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257283 Log: Minimal update, my kernel crashes sometimes when executing test/testlib.sh Modified: soc2013/dpl/head/lib/libzcap/capsicum.c soc2013/dpl/head/lib/libzcap/commands.c soc2013/dpl/head/lib/libzcap/debug.h soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Modified: soc2013/dpl/head/lib/libzcap/capsicum.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.c Fri Sep 13 20:56:42 2013 (r257282) +++ soc2013/dpl/head/lib/libzcap/capsicum.c Fri Sep 13 21:29:29 2013 (r257283) @@ -211,7 +211,7 @@ if( nvlist_send(box->socket, nvl) != 0 ) err(1, "zcaplib: nvlist_send Error"); if (DEBUG_ZCAP) - printf("DEBUG: zcaplib: Awaiting command\n"); + printf("DEBUG: zcaplib: Awaiting answer\n"); if ((new = nvlist_recv(box->socket)) == NULL) err(1, "nvlist_recv(): nvlist_t is NULL"); return (new); Modified: soc2013/dpl/head/lib/libzcap/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/commands.c Fri Sep 13 20:56:42 2013 (r257282) +++ soc2013/dpl/head/lib/libzcap/commands.c Fri Sep 13 21:29:29 2013 (r257283) @@ -2,6 +2,7 @@ * Here live the capsicumed functions of this library. */ +#include "gzguts.h" #include "zlib.h" #include "commands.h" #include "capsicum.h" @@ -91,8 +92,8 @@ extern bool slist_initiated; nvlist_t *nvl, *args, *result; -size_t gzfilesize = sizeof(gzFile); -size_t gzheadersize = sizeof(struct gz_header_s); +size_t gzsize = sizeof(gzFile); +size_t gzheadersize = sizeof(gz_state); size_t zstreamsize = sizeof(z_stream); @@ -265,7 +266,7 @@ result = sendCommand(nvl, strm); ret = nvlist_get_number(result, "result"); - newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, NULL); + newstrm = nvlist_get_binary(result, "newstrm", &zstreamsize); if (newstrm != NULL) memcpy(strm, newstrm, zstreamsize); destroy(); @@ -784,7 +785,7 @@ gzFile file; const void *ptr; - if ((file = malloc(gzfilesize)) == NULL) + if ((file = malloc(gzsize)) == NULL) err(1, "malloc"); initNvl(); @@ -794,11 +795,10 @@ nvlist_move_descriptor(args, "fd", fd); nvlist_add_string(args, "mode", mode); nvlist_add_nvlist(nvl, "args", args); - - result = sendCommand(nvl, file); - ptr = nvlist_get_binary(result, "result", gzfilesize); - memcpy(file, ptr, gzfilesize); + result = sendCommand(nvl, file); + ptr = nvlist_get_binary(result, "result", &gzsize); + memcpy(file, ptr, gzsize); destroy(); return(file); } @@ -810,7 +810,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZBUFFER); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "size", size); nvlist_add_nvlist(nvl, "args", args); @@ -828,7 +828,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZSETPARAMS); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "level", level); nvlist_add_number(args, "strategy", strategy); nvlist_add_nvlist(nvl, "args", args); @@ -848,14 +848,14 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZREAD); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); result = sendCommand(nvl, file); int ret = nvlist_get_number(result, "result"); - data = nvlist_get_binary(result, "data", len); + data = nvlist_get_binary(result, "data", &len); memcpy(buf, data, (size_t)len); destroy(); return(ret); @@ -867,7 +867,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZWRITE); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_binary(args, "data", buf, len); nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); @@ -885,7 +885,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPRINTF); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_string(args, "str", str); nvlist_add_nvlist(nvl, "args", args); @@ -903,7 +903,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTS); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_string(args, "s", s); nvlist_add_nvlist(nvl, "args", args); @@ -921,7 +921,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZGETS); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); @@ -943,7 +943,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTC); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "c", c); nvlist_add_nvlist(nvl, "args", args); @@ -962,7 +962,7 @@ nvlist_add_number(nvl, "command", ZCAPCMD_GZUNGETC); nvlist_add_number(args, "c", c); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_nvlist(nvl, "args", args); result = sendCommand(nvl, file); @@ -979,7 +979,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZFLUSH); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "flush", flush); nvlist_add_nvlist(nvl, "args", args); @@ -997,7 +997,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZSEEK); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "offset", offset); nvlist_add_number(args, "whence", whence); nvlist_add_nvlist(nvl, "args", args); @@ -1019,7 +1019,7 @@ initNvl(); nvlist_add_number(nvl, "command", command); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_number(args, "command", command); nvlist_add_nvlist(nvl, "args", args); @@ -1042,7 +1042,7 @@ initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTC); - nvlist_add_binary(args, "file", file, gzfilesize); + nvlist_add_binary(args, "file", file, gzsize); nvlist_add_nvlist(nvl, "args", args); result = sendCommand(nvl, file); Modified: soc2013/dpl/head/lib/libzcap/debug.h ============================================================================== --- soc2013/dpl/head/lib/libzcap/debug.h Fri Sep 13 20:56:42 2013 (r257282) +++ soc2013/dpl/head/lib/libzcap/debug.h Fri Sep 13 21:29:29 2013 (r257283) @@ -1 +1 @@ -int DEBUG_ZCAP = 1; +int DEBUG_ZCAP = 0; Modified: soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c Fri Sep 13 20:56:42 2013 (r257282) +++ soc2013/dpl/head/lib/libzcap/test/zcaplibtest.c Fri Sep 13 21:29:29 2013 (r257283) @@ -177,22 +177,22 @@ file = gzopen(filename, "wb"); if (file == NULL) err(1, "Couldn't open %s to write", filename); - printf("gzopen: %p\n", file); + printf("gzopen()\n"); - fprintf(stderr, "gzbuffer()\n"); int ret = gzbuffer(file, 8192); if (ret != Z_OK) printf("gzbuffer(): Error: %d\n", ret); + printf("gzbuffer: %d\n", ret); - fprintf(stderr, "gzsetparams()\n"); ret = gzsetparams(file, 9, Z_HUFFMAN_ONLY); if (ret != Z_OK) printf("gzsetparams(): Error: %d\n", ret); + printf("gzsetparams: %d\n", ret); - fprintf(stderr, "gzdirect()\n"); ret = gzdirect(file); if (ret < 0) printf("gzdirect(): Error: %d\n", ret); + printf("gzdirect: %d\n", ret); fprintf(stderr, "Ending testgzbasic\n"); return file; Modified: soc2013/dpl/head/lib/libzcap/zlibworker/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Fri Sep 13 20:56:42 2013 (r257282) +++ soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Fri Sep 13 21:29:29 2013 (r257283) @@ -11,7 +11,7 @@ extern int zero; extern void *data; -size_t gzsize = sizeof(gzFile); +size_t gzsize = sizeof(gz_state); size_t zstreamsize = sizeof(z_stream); /* @@ -245,16 +245,15 @@ void *ret = NULL; int fd; const char *mode; + /* - * In order to make this work, since the library has - * allocated memory to store the gzFile struct, we - * only have to pass the pointer to this data. + * We don't have to save the gzFile, + * zlib does that for us. */ fd = nvlist_take_descriptor(args, "fd"); mode = nvlist_get_string(args, "mode"); ret = gzdopen(fd, mode); - nvlist_add_binary(result, "result", ret, gzsize); } @@ -265,12 +264,10 @@ gzFile file; unsigned size; - fprintf(stderr, "zlibworker: zcapcmd_gzbuffer(): Starts\n"); file = (gzFile)nvlist_get_binary(args, "file", &gzsize); size = nvlist_get_number(args, "size"); ret = gzbuffer(file, size); - nvlist_add_number(result, "result", ret); } From owner-svn-soc-all@FreeBSD.ORG Fri Sep 13 22:08:13 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 28B2D8C6 for ; Fri, 13 Sep 2013 22:08:13 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 153F52A3E for ; Fri, 13 Sep 2013 22:08:13 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8DM8C0L089492 for ; Fri, 13 Sep 2013 22:08:12 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8DM8CVD089487 for svn-soc-all@FreeBSD.org; Fri, 13 Sep 2013 22:08:12 GMT (envelope-from mattbw@FreeBSD.org) Date: Fri, 13 Sep 2013 22:08:12 GMT Message-Id: <201309132208.r8DM8CVD089487@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257286 - soc2013/mattbw/tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Sep 2013 22:08:13 -0000 Author: mattbw Date: Fri Sep 13 22:08:12 2013 New Revision: 257286 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257286 Log: Add new functional test for getting package details. Added: soc2013/mattbw/tests/ftest-get-details-single.sh (contents, props changed) Added: soc2013/mattbw/tests/ftest-get-details-single.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2013/mattbw/tests/ftest-get-details-single.sh Fri Sep 13 22:08:12 2013 (r257286) @@ -0,0 +1,26 @@ +#!/bin/sh +# Functional test for GetDetails based on test repositories. + +pkcon get-details testpkg | awk -f strip_messages.awk > testmsg + +DIFF=`echo "${SUCCESS_MSG}" | diff -rupN - testmsg << EOF +Package description + package: testpkg-1.0.0.freebsd:9:x86:32 + license: BSD + group: multimedia + description: This is a test package for the PackageKit backend. + +WWW: http://wiki.freebsd.org/SummerOfCode2013/pkgPackagekit + size: 123456789 bytes + url: https//wiki.freebsd.org/SummerOfCode2013/pkgPackagekit +EOF +` + +# Expect the diff to be empty. +if [ -n "${DIFF}" ] +then + echo "Test failed; diff follows:" + echo "${DIFF}" + exit +fi +echo "Test succeeded." From owner-svn-soc-all@FreeBSD.ORG Fri Sep 13 22:22:41 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8294D9BE for ; Fri, 13 Sep 2013 22:22:41 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 6FAC42B00 for ; Fri, 13 Sep 2013 22:22:41 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8DMMfJY077921 for ; Fri, 13 Sep 2013 22:22:41 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8DMMfxA077915 for svn-soc-all@FreeBSD.org; Fri, 13 Sep 2013 22:22:41 GMT (envelope-from mattbw@FreeBSD.org) Date: Fri, 13 Sep 2013 22:22:41 GMT Message-Id: <201309132222.r8DMMfxA077915@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257287 - soc2013/mattbw/tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Sep 2013 22:22:41 -0000 Author: mattbw Date: Fri Sep 13 22:22:41 2013 New Revision: 257287 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257287 Log: Add file listing check to the install/remove functional test. Doing this has revealed that the file list-when-not-installed case no longer spits out an error. I should rectify this. Modified: soc2013/mattbw/tests/ftest-install-remove-single.sh Modified: soc2013/mattbw/tests/ftest-install-remove-single.sh ============================================================================== --- soc2013/mattbw/tests/ftest-install-remove-single.sh Fri Sep 13 22:08:12 2013 (r257286) +++ soc2013/mattbw/tests/ftest-install-remove-single.sh Fri Sep 13 22:22:41 2013 (r257287) @@ -35,6 +35,21 @@ exit fi +# Now check to see if the correct files come up on a file list +pkcon get-files testpkg > files +DIFF=`diff -rupN - files << EOF +Package files + /usr/local/testpkgs/testfile + /usr/local/testpkgs/testfile2 +EOF +` +if [ -n "${DIFF}" ] +then + echo "Test failed: file listing invalid, diff follows:" + echo "${DIFF}" + exit +fi + # It should come up as available... RESOLVE=`pkcon resolve --filter "~installed" testpkg | grep "Available.*"` if [ -n "${RESOLVE}" ] From owner-svn-soc-all@FreeBSD.ORG Fri Sep 13 22:23:57 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 0D0989DD for ; Fri, 13 Sep 2013 22:23:57 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id EDA392B0C for ; Fri, 13 Sep 2013 22:23:56 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8DMNulM092720 for ; Fri, 13 Sep 2013 22:23:56 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8DMNuBR092714 for svn-soc-all@FreeBSD.org; Fri, 13 Sep 2013 22:23:56 GMT (envelope-from mattbw@FreeBSD.org) Date: Fri, 13 Sep 2013 22:23:56 GMT Message-Id: <201309132223.r8DMNuBR092714@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257288 - soc2013/mattbw/tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Sep 2013 22:23:57 -0000 Author: mattbw Date: Fri Sep 13 22:23:56 2013 New Revision: 257288 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257288 Log: But strip messages. Modified: soc2013/mattbw/tests/ftest-install-remove-single.sh Modified: soc2013/mattbw/tests/ftest-install-remove-single.sh ============================================================================== --- soc2013/mattbw/tests/ftest-install-remove-single.sh Fri Sep 13 22:22:41 2013 (r257287) +++ soc2013/mattbw/tests/ftest-install-remove-single.sh Fri Sep 13 22:23:56 2013 (r257288) @@ -36,7 +36,7 @@ fi # Now check to see if the correct files come up on a file list -pkcon get-files testpkg > files +pkcon get-files testpkg | awk -f strip_messages.awk > files DIFF=`diff -rupN - files << EOF Package files /usr/local/testpkgs/testfile From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 03:39:03 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 26AF6975 for ; Sat, 14 Sep 2013 03:39:03 +0000 (UTC) (envelope-from ccqin@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 125F02E17 for ; Sat, 14 Sep 2013 03:39:03 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8E3d2nG024632 for ; Sat, 14 Sep 2013 03:39:02 GMT (envelope-from ccqin@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8E3d2b9024590 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 03:39:02 GMT (envelope-from ccqin@FreeBSD.org) Date: Sat, 14 Sep 2013 03:39:02 GMT Message-Id: <201309140339.r8E3d2b9024590@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to ccqin@FreeBSD.org using -f From: ccqin@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257290 - in soc2013/ccqin/head/sys: dev/ath net80211 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 03:39:03 -0000 Author: ccqin Date: Sat Sep 14 03:39:02 2013 New Revision: 257290 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257290 Log: Add aggregation support and export ratectl statistics api. * add IEEE80211_RATECTL_INFO_AGGR to indicate aggregation scenario. * add iri_maxaggrsize to enable ratectl algo return max aggregation size to aggregation code. * modify ath to use the aggregation support. * add ieee80211_ratectl_stats() to net80211 ratectl api to print per-vap ratectl stats. * export per-vap ratectl statistics api through sysctl. when ieee80211_ratectl_init() is called, the api is attached. * export per-device ratectl statistics when the ath attach sysctl stuffs. * add some debug options. Modified: soc2013/ccqin/head/sys/dev/ath/if_ath.c soc2013/ccqin/head/sys/dev/ath/if_ath_sysctl.c soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c soc2013/ccqin/head/sys/net80211/ieee80211_freebsd.c soc2013/ccqin/head/sys/net80211/ieee80211_node.c soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h Modified: soc2013/ccqin/head/sys/dev/ath/if_ath.c ============================================================================== --- soc2013/ccqin/head/sys/dev/ath/if_ath.c Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/dev/ath/if_ath.c Sat Sep 14 03:39:02 2013 (r257290) @@ -4110,6 +4110,7 @@ bf->bf_state.bfs_pktlen, ts->ts_shortretry, ts->ts_longretry, ts->ts_finaltsi, ts->ts_rate); + rc_info->iri_flags &= ~IEEE80211_RATECTL_INFO_AGGR; ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); } ath_tx_default_comp(sc, bf, 0); Modified: soc2013/ccqin/head/sys/dev/ath/if_ath_sysctl.c ============================================================================== --- soc2013/ccqin/head/sys/dev/ath/if_ath_sysctl.c Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/dev/ath/if_ath_sysctl.c Sat Sep 14 03:39:02 2013 (r257290) @@ -71,6 +71,7 @@ #include #include +#include #ifdef IEEE80211_SUPPORT_SUPERG #include #endif @@ -602,6 +603,28 @@ } #endif /* ATH_DEBUG_ALQ */ +static int +ath_sysctl_ratectl_stats(SYSCTL_HANDLER_ARGS) +{ + struct ath_softc *sc = arg1; + struct ieee80211com *ic = sc->sc_ifp->if_l2com; + struct ieee80211vap *vap; + int error, v; + + v = 0; + error = sysctl_handle_int(oidp, &v, 0, req); + if (error || !req->newptr) + return error; + + printf("\n[%s]: per-device net80211 ratectl statistics\n", + ic->ic_ifp->if_xname); + TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) { + ieee80211_ratectl_stats(vap); + } + + return 0; +} + void ath_sysctlattach(struct ath_softc *sc) { @@ -792,6 +815,10 @@ #ifdef ATH_DEBUG_ALQ ath_sysctl_alq_attach(sc); #endif + + SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, + "ratectl_stats", CTLTYPE_INT | CTLFLAG_RW, sc, 0, + ath_sysctl_ratectl_stats, "I", "per-device net80211 ratectl statistics"); } static int Modified: soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c ============================================================================== --- soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/dev/ath/if_ath_tx.c Sat Sep 14 03:39:02 2013 (r257290) @@ -1437,8 +1437,13 @@ rc = rc_info->iri_rc; bzero(rc_info, sizeof(rc_info)); + if (bf->bf_state.bfs_shpream) rc_info->iri_flags |= IEEE80211_RATECTL_INFO_SP; + if (bf->bf_state.bfs_aggr) + rc_info->iri_flags |= IEEE80211_RATECTL_INFO_AGGR; + + rc_info->iri_framelen = bf->bf_state.bfs_pktlen; ieee80211_ratectl_rates(ni, rc_info); @@ -1568,7 +1573,8 @@ * frames that must go out - eg management/raw frames. */ bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; - + + bf->bf_state.bfs_aggr = 0; /* Setup the descriptor before handoff */ ath_tx_do_ratelookup(sc, bf); ath_tx_calc_duration(sc, bf); @@ -4169,7 +4175,7 @@ "%s: found ratectl mbuf tag.\n", __func__); rc_info = (struct ieee80211_rc_info*)(mtag + 1); } - + rc_info->iri_flags &= ~IEEE80211_RATECTL_INFO_AGGR; ieee80211_ratectl_rc_info_set(rc_info, 1, (ts->ts_status == 0 ? 0 : 1), bf->bf_state.bfs_pktlen, @@ -4581,6 +4587,7 @@ bf_first->bf_state.bfs_pktlen, ts.ts_shortretry, ts.ts_longretry, ts.ts_finaltsi, ts.ts_rate); + rc_info->iri_flags |= IEEE80211_RATECTL_INFO_AGGR; ieee80211_ratectl_tx_complete(ni->ni_vap, ni, rc_info); ATH_TX_LOCK(sc); @@ -4995,6 +5002,7 @@ rc_info = (struct ieee80211_rc_info*)(mtag + 1); } + rc_info->iri_flags |= IEEE80211_RATECTL_INFO_AGGR; ieee80211_ratectl_rc_info_set(rc_info, nframes, nbad, pktlen, ts.ts_shortretry, ts.ts_longretry, @@ -5112,6 +5120,7 @@ rc_info = (struct ieee80211_rc_info*)(mtag + 1); } + rc_info->iri_flags &= ~IEEE80211_RATECTL_INFO_AGGR; ieee80211_ratectl_rc_info_set(rc_info, 1, (ts.ts_status == 0 ? 0 : 1), bf->bf_state.bfs_pktlen, @@ -5335,6 +5344,15 @@ } /* + * If non-aggregate scenario appears, this will be + * turned off. + * + * This flag is used by ath_tx_do_ratelookup() to + * distinguish aggr/non-aggr scenario. + */ + bf->bf_state.bfs_aggr = 1; + + /* * If the packet doesn't fall within the BAW (eg a NULL * data frame), schedule it directly; continue. */ @@ -5577,6 +5595,7 @@ /* Update CLRDMASK just before this frame is queued */ ath_tx_update_clrdmask(sc, tid, bf); + bf->bf_state.bfs_aggr = 0; /* Program descriptors + rate control */ ath_tx_do_ratelookup(sc, bf); ath_tx_calc_duration(sc, bf); Modified: soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/net80211/ieee80211_amrr.c Sat Sep 14 03:39:02 2013 (r257290) @@ -68,8 +68,9 @@ static void amrr_rates(struct ieee80211_node *, struct ieee80211_rc_info *); static void amrr_tx_complete(const struct ieee80211vap *, const struct ieee80211_node *, struct ieee80211_rc_info *); -static void amrr_tx_update(const struct ieee80211vap *vap, +static void amrr_tx_update(const struct ieee80211vap *, const struct ieee80211_node *, void *, void *, void *); +static void amrr_stats(const struct ieee80211vap *); static void amrr_sysctlattach(struct ieee80211vap *, struct sysctl_ctx_list *, struct sysctl_oid *); @@ -89,6 +90,7 @@ .ir_tx_complete = amrr_tx_complete, .ir_tx_update = amrr_tx_update, .ir_setinterval = amrr_setinterval, + .ir_stats = amrr_stats, }; IEEE80211_RATECTL_MODULE(amrr, 1); IEEE80211_RATECTL_ALG(amrr, IEEE80211_RATECTL_AMRR, amrr); @@ -336,20 +338,20 @@ code = ieee80211_ratectl_node_is11n(ni)? MCS(rix) : RATE(rix); rc[1].rix = rt->rateCodeToIndex[code]; } else { - rc[1].rix = 0; + rc[1].rix = rt->rateCodeToIndex[0]; } if (--rix >= 0) { code = ieee80211_ratectl_node_is11n(ni)? MCS(rix) : RATE(rix); rc[2].rix = rt->rateCodeToIndex[code]; } else { - rc[2].rix = 0; + rc[2].rix = rt->rateCodeToIndex[0]; } - if (rix > 0) { + if (rix >= 0) { /* NB: only do this if we didn't already do it above */ code = ieee80211_ratectl_node_is11n(ni)? MCS(0) : RATE(0); rc[3].rix = rt->rateCodeToIndex[code]; } else { - rc[3].rix = 0; + rc[3].rix = rt->rateCodeToIndex[0]; } } else { rc[0].tries = IEEE80211_RATECTL_TXMAXTRY; @@ -357,9 +359,9 @@ rc[1].tries = 0; rc[2].tries = 0; rc[3].tries = 0; - rc[1].rix = 0; - rc[2].rix = 0; - rc[3].rix = 0; + rc[1].rix = rt->rateCodeToIndex[0]; + rc[2].rix = rt->rateCodeToIndex[0]; + rc[3].rix = rt->rateCodeToIndex[0]; } } IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, @@ -418,6 +420,16 @@ __func__, txcnt, success, retrycnt); } +static void +amrr_stats(const struct ieee80211vap *vap) +{ + struct ieee80211_rc_stat * irs = IEEE80211_RATECTL_STAT(vap); + printf("tx count: %d (ok count: %d, fail count: %d)\n" + "retry count: %d (short retry: %d, long retry: %d)\n", + irs->irs_txcnt, irs->irs_txcnt - irs->irs_failcnt, irs->irs_failcnt, + irs->irs_retrycnt, irs->irs_shortretry, irs->irs_longretry); +} + static int amrr_sysctl_interval(SYSCTL_HANDLER_ARGS) { Modified: soc2013/ccqin/head/sys/net80211/ieee80211_freebsd.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_freebsd.c Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/net80211/ieee80211_freebsd.c Sat Sep 14 03:39:02 2013 (r257290) @@ -262,7 +262,7 @@ "driver_caps", CTLFLAG_RW, &vap->iv_caps, 0, "driver capabilities"); #ifdef IEEE80211_DEBUG - ieee80211_debug |= IEEE80211_MSG_RATECTL; + ieee80211_debug |= (IEEE80211_MSG_RATECTL|IEEE80211_MSG_NODE|IEEE80211_MSG_SCAN); vap->iv_debug = ieee80211_debug; if_printf(ifp, "%s: iv_debug=0x%08x\n", __func__, vap->iv_debug); SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(oid), OID_AUTO, Modified: soc2013/ccqin/head/sys/net80211/ieee80211_node.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_node.c Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/net80211/ieee80211_node.c Sat Sep 14 03:39:02 2013 (r257290) @@ -1074,6 +1074,8 @@ ieee80211_ies_cleanup(&ni->ni_ies); ieee80211_psq_cleanup(&ni->ni_psq); free(ni, M_80211_NODE); + IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_RATECTL, + "%s: after free(ni, M_80211_NODE).\n", __func__); } static void @@ -1733,7 +1735,7 @@ * to use ni_ic below to reclaim resources. */ #if 0 - IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE, + IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_NODE, "%s %p<%s> in %s table\n", __func__, ni, ether_sprintf(ni->ni_macaddr), nt != NULL ? nt->nt_name : ""); Modified: soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.c Sat Sep 14 03:39:02 2013 (r257290) @@ -100,12 +100,33 @@ ratectls[type] = NULL; } +static int +ratectl_sysctl_stats(SYSCTL_HANDLER_ARGS) +{ + struct ieee80211vap *vap = arg1; + int error, v; + + v = 0; + error = sysctl_handle_int(oidp, &v, 0, req); + if (error || !req->newptr) + return error; + + ieee80211_ratectl_stats(vap); + return 0; +} + void ieee80211_ratectl_init(struct ieee80211vap *vap, uint32_t capabilities) { if (vap->iv_rate == ratectls[IEEE80211_RATECTL_NONE]) ieee80211_ratectl_set(vap, IEEE80211_RATECTL_AMRR); vap->iv_rate->ir_init(vap, capabilities); + + SYSCTL_ADD_PROC(vap->iv_sysctl, SYSCTL_CHILDREN(vap->iv_oid), + OID_AUTO, "ratectl_stats", CTLTYPE_INT | CTLFLAG_RW, + vap, 0, ratectl_sysctl_stats, "I", + "per-vap net80211 ratectl statistics"); + IEEE80211_DPRINTF(vap, IEEE80211_MSG_RATECTL, "%s: ratectl initialized. caps=0x%08x\n", __func__, capabilities); Modified: soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h ============================================================================== --- soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h Fri Sep 13 23:10:53 2013 (r257289) +++ soc2013/ccqin/head/sys/net80211/ieee80211_ratectl.h Sat Sep 14 03:39:02 2013 (r257290) @@ -79,21 +79,23 @@ struct ieee80211_rc_info { struct ieee80211_rc_series iri_rc[IEEE80211_RATECTL_NUM]; uint32_t iri_framelen; - uint16_t iri_flags; /* for now, just records short preamble */ + uint16_t iri_flags; /* See below */ + uint16_t iri_maxaggrsize; /* Maximum aggregate size */ /* TX info */ - uint8_t iri_txcnt; /* TX count */ - uint8_t iri_okcnt; /* TX ok with or without retry */ - uint8_t iri_failcnt; /* TX retry-fail count */ - uint8_t iri_retrycnt; /* TX retry count */ + uint8_t iri_txcnt; /* TX count */ + uint8_t iri_failcnt; /* TX retry-fail count */ + uint8_t iri_okcnt; /* TX ok with or without retry */ + uint8_t iri_retrycnt; /* TX retry count */ uint8_t iri_shortretry; uint8_t iri_longretry; uint8_t iri_finaltsi; - uint8_t iri_txrate; /* hw tx rate */ + uint8_t iri_txrate; /* HW tx rate */ }; /* ieee80211_rc_info flags */ #define IEEE80211_RATECTL_INFO_SP 0x01 /* short preamble */ +#define IEEE80211_RATECTL_INFO_AGGR 0x02 /* aggregation scenario */ #define NET80211_TAG_RATECTL 1 /* net80211 ratectl state */ @@ -138,6 +140,7 @@ const struct ieee80211_node *, void *, void *, void *); void (*ir_setinterval)(const struct ieee80211vap *, int); + void (*ir_stats)(const struct ieee80211vap *); }; void ieee80211_ratectl_register(int, const struct ieee80211_ratectl *); @@ -161,7 +164,7 @@ const struct ieee80211vap *vap = ni->ni_vap; vap->iv_rate->ir_node_init(ni); - IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_RATECTL, + IEEE80211_DPRINTF(vap, IEEE80211_MSG_RATECTL, "%s: net80211 ratectl node inited.\n", __func__); } @@ -171,6 +174,8 @@ const struct ieee80211vap *vap = ni->ni_vap; vap->iv_rate->ir_node_deinit(ni); + IEEE80211_DPRINTF(vap, IEEE80211_MSG_RATECTL, + "%s: net80211 ratectl node deinited.\n", __func__); } static int __inline @@ -186,6 +191,13 @@ { const struct ieee80211vap *vap = ni->ni_vap; + if (rc_info->iri_flags & IEEE80211_RATECTL_INFO_AGGR) + rc_info->iri_framelen = 0; + + IEEE80211_DPRINTF(vap, IEEE80211_MSG_RATECTL, + "%s: find rate sets for %saggregation scenario.\n", __func__, + (rc_info->iri_flags & IEEE80211_RATECTL_INFO_AGGR)? "" : "non-"); + vap->iv_rate->ir_rates(ni, rc_info); ieee80211_ratectl_complete_rcflags(ni, rc_info); } @@ -214,6 +226,16 @@ vap->iv_rate->ir_setinterval(vap, msecs); } +static void __inline +ieee80211_ratectl_stats(const struct ieee80211vap *vap) +{ + printf("\n[%s]: net80211 ratectl statistics (%s)\n", + vap->iv_ifp->if_xname, vap->iv_rate->ir_name); + if (vap->iv_rate->ir_stats == NULL) + return; + vap->iv_rate->ir_stats(vap); +} + static int __inline ieee80211_ratectl_hascap_cw40(const struct ieee80211_node *ni) { From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 15:53:53 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1A11078F for ; Sat, 14 Sep 2013 15:53:53 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E39AC2D25 for ; Sat, 14 Sep 2013 15:53:52 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EFrqsx046066 for ; Sat, 14 Sep 2013 15:53:52 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EFrqVj046060 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 15:53:52 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 15:53:52 GMT Message-Id: <201309141553.r8EFrqVj046060@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257328 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 15:53:53 -0000 Author: zcore Date: Sat Sep 14 15:53:52 2013 New Revision: 257328 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257328 Log: ATA_ATA_IDENTIFY: abort if ATAPI or prdtl is wrong Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 13:12:13 2013 (r257327) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 15:53:52 2013 (r257328) @@ -433,19 +433,21 @@ } static void -handle_cmd(struct ahci_port *p, int slot, uint8_t *cfis) +handle_identify(struct ahci_port *p, int slot, uint8_t *cfis) { + struct ahci_cmd_hdr *hdr; struct pci_ahci_softc *sc = p->pr_sc; - struct ahci_prdt_entry *prdt = (struct ahci_prdt_entry *)(cfis + 0x80); - switch(cfis[2]) { - case ATA_ATA_IDENTIFY: - { + hdr = p->cmd_lst + slot * AHCI_CL_SIZE; + if (p->atapi || hdr->prdtl == 0) { + p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; + p->is |= AHCI_P_IX_TFE; + } else { uint16_t buf[256]; uint64_t sectors; int i, len; void *from; - struct ahci_cmd_hdr *hdr; + struct ahci_prdt_entry *prdt; sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); memset(buf, 0, sizeof(buf)); @@ -489,13 +491,9 @@ buf[101] = (sectors >> 16); buf[102] = (sectors >> 32); buf[103] = (sectors >> 48); - hdr = p->cmd_lst + slot * AHCI_CL_SIZE; - if (hdr->prdtl == 0) { - WPRINTF(("wrong prdtl\n")); - return; - } len = sizeof(buf); from = buf; + prdt = (struct ahci_prdt_entry *)(cfis + 0x80); for (i = 0; i < hdr->prdtl && len; i++) { uint8_t *p = paddr_guest2host(ahci_ctx(sc), prdt->dba, prdt->dbc + 1); @@ -507,10 +505,18 @@ hdr->prdbc = sizeof(buf) - len; p->tfd = ATA_S_DSC | ATA_S_READY; p->is |= AHCI_P_IX_DP; - p->ci &= ~(1 << slot); - ahci_generate_intr(sc); - break; } + p->ci &= ~(1 << slot); + ahci_generate_intr(sc); +} + +static void +handle_cmd(struct ahci_port *p, int slot, uint8_t *cfis) +{ + switch(cfis[2]) { + case ATA_ATA_IDENTIFY: + handle_identify(p, slot, cfis); + break; case ATA_SETFEATURES: { switch (cfis[3]) { @@ -541,7 +547,7 @@ } p->is |= AHCI_P_IX_DP; p->ci &= ~(1 << slot); - ahci_generate_intr(sc); + ahci_generate_intr(p->pr_sc); break; } case ATA_SET_MULTI: @@ -555,7 +561,7 @@ } p->is |= AHCI_P_IX_DP; p->ci &= ~(1 << slot); - ahci_generate_intr(sc); + ahci_generate_intr(p->pr_sc); break; case ATA_READ_DMA: case ATA_WRITE_DMA: @@ -581,7 +587,7 @@ p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; p->is |= AHCI_P_IX_TFE; p->ci &= ~(1 << slot); - ahci_generate_intr(sc); + ahci_generate_intr(p->pr_sc); break; } } From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 15:57:50 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 2B8A37D5 for ; Sat, 14 Sep 2013 15:57:50 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id F13D72D3C for ; Sat, 14 Sep 2013 15:57:49 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EFvnlW092066 for ; Sat, 14 Sep 2013 15:57:49 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EFvniq092060 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 15:57:49 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 15:57:49 GMT Message-Id: <201309141557.r8EFvniq092060@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257329 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 15:57:50 -0000 Author: zcore Date: Sat Sep 14 15:57:49 2013 New Revision: 257329 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257329 Log: support ATA_ATAPI_IDENTIFY Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 15:53:52 2013 (r257328) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 15:57:49 2013 (r257329) @@ -511,6 +511,65 @@ } static void +handle_atapi_identify(struct ahci_port *p, int slot, uint8_t *cfis) +{ + struct pci_ahci_softc *sc = p->pr_sc; + + if (!p->atapi) { + p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; + p->is |= AHCI_P_IX_TFE; + } else { + uint16_t buf[256]; + int i, len; + void *from; + struct ahci_prdt_entry *prdt; + struct ahci_cmd_hdr *hdr; + + memset(buf, 0, sizeof(buf)); + buf[0] = (2 << 14 | 5 << 8 | 1 << 7 | 2 << 5); + /* TODO emulate different serial? */ + ata_string((uint8_t *)(buf+10), "123456", 20); + ata_string((uint8_t *)(buf+23), "001", 8); + ata_string((uint8_t *)(buf+27), "BHYVE SATA DVD ROM", 40); + buf[49] = (1 << 9 | 1 << 8); + buf[50] = (1 << 14 | 1); + buf[53] = (1 << 2 | 1 << 1); + buf[62] = 0x3f; + buf[63] = 7; + buf[64] = 3; + buf[65] = 100; + buf[66] = 100; + buf[67] = 100; + buf[68] = 100; + buf[76] = (1 << 2 | 1 << 1); + buf[80] = (0x1f << 4); + buf[82] = (1 << 4); + buf[83] = (1 << 14); + buf[84] = (1 << 14); + buf[85] = (1 << 4); + buf[87] = (1 << 14); + buf[88] = (1 << 14 | 0x7f); + len = sizeof(buf); + from = buf; + prdt = (struct ahci_prdt_entry *)(cfis + 0x80); + hdr = p->cmd_lst + slot * AHCI_CL_SIZE; + for (i = 0; i < hdr->prdtl && len; i++) { + uint8_t *p = paddr_guest2host(ahci_ctx(sc), + prdt->dba, prdt->dbc + 1); + memcpy(p, from, prdt->dbc + 1); + len -= (prdt->dbc + 1); + from += (prdt->dbc + 1); + prdt++; + } + hdr->prdbc = sizeof(buf) - len; + p->tfd = ATA_S_DSC | ATA_S_READY; + p->is |= AHCI_P_IX_DHR; + } + p->ci &= ~(1 << slot); + ahci_generate_intr(sc); +} + +static void handle_cmd(struct ahci_port *p, int slot, uint8_t *cfis) { switch(cfis[2]) { @@ -583,7 +642,11 @@ case ATA_SLEEP: ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); break; + case ATA_ATAPI_IDENTIFY: + handle_atapi_identify(p, slot, cfis); + break; default: + WPRINTF(("Unsupported cmd:%02x\n", cfis[2])); p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; p->is |= AHCI_P_IX_TFE; p->ci &= ~(1 << slot); From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 15:59:26 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 95ACC7FC for ; Sat, 14 Sep 2013 15:59:26 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 821922D47 for ; Sat, 14 Sep 2013 15:59:26 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EFxQfB001131 for ; Sat, 14 Sep 2013 15:59:26 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EFxQsM001129 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 15:59:26 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 15:59:26 GMT Message-Id: <201309141559.r8EFxQsM001129@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257330 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 15:59:26 -0000 Author: zcore Date: Sat Sep 14 15:59:26 2013 New Revision: 257330 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257330 Log: support ATA_PACKET_CMD Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 15:57:49 2013 (r257329) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 15:59:26 2013 (r257330) @@ -100,6 +100,8 @@ uint32_t unhandled_write; pthread_cond_t flush_cond; uint8_t xfermode; + uint8_t sense_key; + uint8_t asc; uint32_t clb; uint32_t clbu; @@ -570,9 +572,31 @@ } static void +handle_packet_cmd(struct ahci_port *p, int slot, uint8_t *cfis) +{ + uint8_t *acmd = cfis + 0x40; + + { + int i; + dprintf("ACMD:\n"); + for (i = 0; i < 16; i++) + dprintf("%02x ", acmd[i]); + dprintf("\n"); + } + switch (acmd[0]) { + case ATAPI_TEST_UNIT_READY: + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); + break; + default: + break; + } +} + +static void handle_cmd(struct ahci_port *p, int slot, uint8_t *cfis) { - switch(cfis[2]) { + switch (cfis[2]) { case ATA_ATA_IDENTIFY: handle_identify(p, slot, cfis); break; @@ -645,6 +669,15 @@ case ATA_ATAPI_IDENTIFY: handle_atapi_identify(p, slot, cfis); break; + case ATA_PACKET_CMD: + if (!p->atapi) { + p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; + p->is |= AHCI_P_IX_TFE; + p->ci &= ~(1 << slot); + ahci_generate_intr(p->pr_sc); + } else + handle_packet_cmd(p, slot, cfis); + break; default: WPRINTF(("Unsupported cmd:%02x\n", cfis[2])); p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:00:01 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 374B689E for ; Sat, 14 Sep 2013 16:00:01 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0A9B72D55 for ; Sat, 14 Sep 2013 16:00:01 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG00gq001601 for ; Sat, 14 Sep 2013 16:00:00 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG00Ic001596 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:00:00 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:00:00 GMT Message-Id: <201309141600.r8EG00Ic001596@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257331 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:00:01 -0000 Author: zcore Date: Sat Sep 14 16:00:00 2013 New Revision: 257331 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257331 Log: support ATAPI_INQUIRY Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 15:59:26 2013 (r257330) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:00:00 2013 (r257331) @@ -336,6 +336,19 @@ } static void +atapi_string(uint8_t *dest, const char *src, int len) +{ + int i; + + for (i = 0; i < len; i++) { + if (*src) + dest[i] = *src++; + else + dest[i] = ' '; + } +} + +static void handle_dma(struct ahci_port *p, int slot, uint8_t *cfis) { int i, err, readop = 1; @@ -497,9 +510,9 @@ from = buf; prdt = (struct ahci_prdt_entry *)(cfis + 0x80); for (i = 0; i < hdr->prdtl && len; i++) { - uint8_t *p = paddr_guest2host(ahci_ctx(sc), + uint8_t *ptr = paddr_guest2host(ahci_ctx(sc), prdt->dba, prdt->dbc + 1); - memcpy(p, from, prdt->dbc + 1); + memcpy(ptr, from, prdt->dbc + 1); len -= (prdt->dbc + 1); from += (prdt->dbc + 1); prdt++; @@ -572,6 +585,46 @@ } static void +atapi_inquiry(struct ahci_port *p, int slot, uint8_t *cfis) +{ + uint8_t buf[36]; + uint8_t *acmd = cfis + 0x40; + int i, len; + void *from; + struct ahci_cmd_hdr *hdr; + struct ahci_prdt_entry *prdt; + + buf[0] = 0x05; + buf[1] = 0x80; + buf[2] = 0x00; + buf[3] = 0x21; + buf[4] = 31; + buf[5] = 0; + buf[6] = 0; + buf[7] = 0; + atapi_string(buf + 8, "BHYVE", 8); + atapi_string(buf + 16, "BHYVE DVD-ROM", 16); + atapi_string(buf + 32, "001", 4); + + len = sizeof(buf); + if (len > acmd[4]) + len = acmd[4]; + from = buf; + hdr = p->cmd_lst + slot * AHCI_CL_SIZE; + prdt = (struct ahci_prdt_entry *)(cfis + 0x80); + for (i = 0; i < hdr->prdtl && len; i++) { + uint8_t *ptr = paddr_guest2host(ahci_ctx(p->pr_sc), + prdt->dba, prdt->dbc + 1); + memcpy(ptr, from, prdt->dbc + 1); + len -= (prdt->dbc + 1); + from += (prdt->dbc + 1); + prdt++; + } + hdr->prdbc = sizeof(buf) - len; + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); +} + +static void handle_packet_cmd(struct ahci_port *p, int slot, uint8_t *cfis) { uint8_t *acmd = cfis + 0x40; @@ -588,6 +641,9 @@ cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); break; + case ATAPI_INQUIRY: + atapi_inquiry(p, slot, cfis); + break; default: break; } From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:00:27 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 6A78A8B5 for ; Sat, 14 Sep 2013 16:00:27 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 57BA82D5C for ; Sat, 14 Sep 2013 16:00:27 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG0Rtn019619 for ; Sat, 14 Sep 2013 16:00:27 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG0RMG019599 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:00:27 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:00:27 GMT Message-Id: <201309141600.r8EG0RMG019599@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257333 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:00:27 -0000 Author: zcore Date: Sat Sep 14 16:00:27 2013 New Revision: 257333 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257333 Log: consolidate write prdt Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 15:29:06 2013 (r257332) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:00:27 2013 (r257333) @@ -447,11 +447,34 @@ ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); } +static inline void +write_prdt(struct ahci_port *p, int slot, uint8_t *cfis, + void *buf, int size) +{ + int i, len; + void *from; + struct ahci_cmd_hdr *hdr; + struct ahci_prdt_entry *prdt; + + hdr = p->cmd_lst + slot * AHCI_CL_SIZE; + len = size; + from = buf; + prdt = (struct ahci_prdt_entry *)(cfis + 0x80); + for (i = 0; i < hdr->prdtl && len; i++) { + uint8_t *ptr = paddr_guest2host(ahci_ctx(p->pr_sc), + prdt->dba, prdt->dbc + 1); + memcpy(ptr, from, prdt->dbc + 1); + len -= (prdt->dbc + 1); + from += (prdt->dbc + 1); + prdt++; + } + hdr->prdbc = size - len; +} + static void handle_identify(struct ahci_port *p, int slot, uint8_t *cfis) { struct ahci_cmd_hdr *hdr; - struct pci_ahci_softc *sc = p->pr_sc; hdr = p->cmd_lst + slot * AHCI_CL_SIZE; if (p->atapi || hdr->prdtl == 0) { @@ -460,9 +483,6 @@ } else { uint16_t buf[256]; uint64_t sectors; - int i, len; - void *from; - struct ahci_prdt_entry *prdt; sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); memset(buf, 0, sizeof(buf)); @@ -506,39 +526,22 @@ buf[101] = (sectors >> 16); buf[102] = (sectors >> 32); buf[103] = (sectors >> 48); - len = sizeof(buf); - from = buf; - prdt = (struct ahci_prdt_entry *)(cfis + 0x80); - for (i = 0; i < hdr->prdtl && len; i++) { - uint8_t *ptr = paddr_guest2host(ahci_ctx(sc), - prdt->dba, prdt->dbc + 1); - memcpy(ptr, from, prdt->dbc + 1); - len -= (prdt->dbc + 1); - from += (prdt->dbc + 1); - prdt++; - } - hdr->prdbc = sizeof(buf) - len; + write_prdt(p, slot, cfis, (void *)buf, sizeof(buf)); p->tfd = ATA_S_DSC | ATA_S_READY; p->is |= AHCI_P_IX_DP; } p->ci &= ~(1 << slot); - ahci_generate_intr(sc); + ahci_generate_intr(p->pr_sc); } static void handle_atapi_identify(struct ahci_port *p, int slot, uint8_t *cfis) { - struct pci_ahci_softc *sc = p->pr_sc; - if (!p->atapi) { p->tfd = (ATA_E_ABORT << 8) | ATA_S_READY | ATA_S_ERROR; p->is |= AHCI_P_IX_TFE; } else { uint16_t buf[256]; - int i, len; - void *from; - struct ahci_prdt_entry *prdt; - struct ahci_cmd_hdr *hdr; memset(buf, 0, sizeof(buf)); buf[0] = (2 << 14 | 5 << 8 | 1 << 7 | 2 << 5); @@ -564,35 +567,20 @@ buf[85] = (1 << 4); buf[87] = (1 << 14); buf[88] = (1 << 14 | 0x7f); - len = sizeof(buf); - from = buf; - prdt = (struct ahci_prdt_entry *)(cfis + 0x80); - hdr = p->cmd_lst + slot * AHCI_CL_SIZE; - for (i = 0; i < hdr->prdtl && len; i++) { - uint8_t *p = paddr_guest2host(ahci_ctx(sc), - prdt->dba, prdt->dbc + 1); - memcpy(p, from, prdt->dbc + 1); - len -= (prdt->dbc + 1); - from += (prdt->dbc + 1); - prdt++; - } - hdr->prdbc = sizeof(buf) - len; + write_prdt(p, slot, cfis, (void *)buf, sizeof(buf)); p->tfd = ATA_S_DSC | ATA_S_READY; p->is |= AHCI_P_IX_DHR; } p->ci &= ~(1 << slot); - ahci_generate_intr(sc); + ahci_generate_intr(p->pr_sc); } static void atapi_inquiry(struct ahci_port *p, int slot, uint8_t *cfis) { + int len; uint8_t buf[36]; uint8_t *acmd = cfis + 0x40; - int i, len; - void *from; - struct ahci_cmd_hdr *hdr; - struct ahci_prdt_entry *prdt; buf[0] = 0x05; buf[1] = 0x80; @@ -609,18 +597,7 @@ len = sizeof(buf); if (len > acmd[4]) len = acmd[4]; - from = buf; - hdr = p->cmd_lst + slot * AHCI_CL_SIZE; - prdt = (struct ahci_prdt_entry *)(cfis + 0x80); - for (i = 0; i < hdr->prdtl && len; i++) { - uint8_t *ptr = paddr_guest2host(ahci_ctx(p->pr_sc), - prdt->dba, prdt->dbc + 1); - memcpy(ptr, from, prdt->dbc + 1); - len -= (prdt->dbc + 1); - from += (prdt->dbc + 1); - prdt++; - } - hdr->prdbc = sizeof(buf) - len; + write_prdt(p, slot, cfis, buf, len); ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); } From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:00:57 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 57A508C8 for ; Sat, 14 Sep 2013 16:00:57 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 44BBB2D81 for ; Sat, 14 Sep 2013 16:00:57 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG0vmh046884 for ; Sat, 14 Sep 2013 16:00:57 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG0vVv046871 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:00:57 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:00:57 GMT Message-Id: <201309141600.r8EG0vVv046871@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257334 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:00:57 -0000 Author: zcore Date: Sat Sep 14 16:00:57 2013 New Revision: 257334 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257334 Log: support ATAPI_READ_CAPACITY Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:00:27 2013 (r257333) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:00:57 2013 (r257334) @@ -163,6 +163,14 @@ }; #define ahci_ctx(sc) ((sc)->asc_pi->pi_vmctx) +static inline uint32_t cpu_to_be32(uint32_t val) +{ + return ((val & 0xff) << 24) | + ((val & 0xff00) << 8) | + ((val & 0xff0000) >> 8) | + ((val & 0xff000000) >> 24); +} + /* * generate HBA intr depending on whether or not ports within * the controller have an interrupt pending. @@ -602,6 +610,20 @@ } static void +atapi_read_capacity(struct ahci_port *p, int slot, uint8_t *cfis) +{ + uint8_t buf[8]; + uint64_t sectors; + uint32_t *ptr = (uint32_t *)buf; + + sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); + ptr[0] = cpu_to_be32(sectors - 1); + ptr[1] = cpu_to_be32(2048); + write_prdt(p, slot, cfis, buf, sizeof(buf)); + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); +} + +static void handle_packet_cmd(struct ahci_port *p, int slot, uint8_t *cfis) { uint8_t *acmd = cfis + 0x40; @@ -619,8 +641,13 @@ ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); break; case ATAPI_INQUIRY: + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; atapi_inquiry(p, slot, cfis); break; + case ATAPI_READ_CAPACITY: + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + atapi_read_capacity(p, slot, cfis); + break; default: break; } From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:01:40 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id F1DD18E0 for ; Sat, 14 Sep 2013 16:01:40 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DE7B82D87 for ; Sat, 14 Sep 2013 16:01:40 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG1eMh056555 for ; Sat, 14 Sep 2013 16:01:40 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG1eGk056550 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:01:40 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:01:40 GMT Message-Id: <201309141601.r8EG1eGk056550@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257335 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:01:41 -0000 Author: zcore Date: Sat Sep 14 16:01:40 2013 New Revision: 257335 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257335 Log: support ATAPI_PREVENT_ALLOW Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:00:57 2013 (r257334) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:01:40 2013 (r257335) @@ -648,6 +648,11 @@ cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; atapi_read_capacity(p, slot, cfis); break; + case ATAPI_PREVENT_ALLOW: + /* TODO */ + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); + break; default: break; } From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:02:39 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 851898F1 for ; Sat, 14 Sep 2013 16:02:39 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 63E8D2D89 for ; Sat, 14 Sep 2013 16:02:39 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG2dg3067409 for ; Sat, 14 Sep 2013 16:02:39 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG2dvj067398 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:02:39 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:02:39 GMT Message-Id: <201309141602.r8EG2dvj067398@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257336 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:02:39 -0000 Author: zcore Date: Sat Sep 14 16:02:39 2013 New Revision: 257336 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257336 Log: support ATAPI_READ_TOC Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:01:40 2013 (r257335) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:02:39 2013 (r257336) @@ -171,6 +171,25 @@ ((val & 0xff000000) >> 24); } +static inline uint32_t cpu_to_be16(uint16_t val) +{ + return ((val & 0xff) << 8) | + ((val & 0xff00) >> 8); +} + +static inline uint16_t be16_to_cpu(uint8_t *val) +{ + return (val[0] << 8) | val[1]; +} + +static inline void lba_to_msf(uint8_t *buf, int lba) +{ + lba += 150; + buf[0] = (lba / 75) / 60; + buf[1] = (lba / 75) % 60; + buf[2] = lba % 75; +} + /* * generate HBA intr depending on whether or not ports within * the controller have an interrupt pending. @@ -605,6 +624,7 @@ len = sizeof(buf); if (len > acmd[4]) len = acmd[4]; + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; write_prdt(p, slot, cfis, buf, len); ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); } @@ -619,11 +639,187 @@ sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); ptr[0] = cpu_to_be32(sectors - 1); ptr[1] = cpu_to_be32(2048); + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; write_prdt(p, slot, cfis, buf, sizeof(buf)); ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); } static void +atapi_read_toc(struct ahci_port *p, int slot, uint8_t *cfis) +{ + int len; + uint8_t format, *acmd = cfis + 0x40; + + len = be16_to_cpu(acmd + 7); + format = acmd[9] >> 6; + switch (format) { + case 0: + { + int msf, size; + uint64_t sectors; + uint8_t start_track, buf[20], *bp; + + msf = (acmd[1] >> 1) & 1; + start_track = acmd[6]; + if (start_track > 1 && start_track != 0xaa) { + uint32_t tfd; + p->sense_key = ATA_SENSE_ILLEGAL_REQUEST; + p->asc = 0x24; + tfd = (p->sense_key << 4) | ATA_S_READY | ATA_S_ERROR; + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, tfd); + return; + } + bp = buf + 2; + *bp++ = 1; + *bp++ = 1; + if (start_track <= 1) { + *bp++ = 0; + *bp++ = 0x14; + *bp++ = 1; + *bp++ = 0; + if (msf) { + *bp++ = 0; + lba_to_msf(bp, 0); + bp += 3; + } else { + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + } + } + *bp++ = 0; + *bp++ = 0x14; + *bp++ = 0xaa; + *bp++ = 0; + sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); + if (msf) { + *bp++ = 0; + lba_to_msf(bp, sectors); + bp += 3; + } else { + *(uint32_t *)bp = cpu_to_be32(sectors); + bp += 4; + } + size = bp - buf; + *(uint16_t*)buf = cpu_to_be16(size - 2); + if (len > size) + len = size; + write_prdt(p, slot, cfis, buf, len); + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); + break; + } + case 1: + { + uint8_t buf[12]; + + memset(buf, 0, sizeof(buf)); + buf[1] = 0xa; + buf[2] = 0x1; + buf[3] = 0x1; + if (len > sizeof(buf)) + len = sizeof(buf); + write_prdt(p, slot, cfis, buf, len); + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); + break; + } + case 2: + { + int msf, size; + uint64_t sectors; + uint8_t start_track, *bp, buf[50]; + + msf = (acmd[1] >> 1) & 1; + start_track = acmd[6]; + bp = buf + 2; + *bp++ = 1; + *bp++ = 1; + + *bp++ = 1; + *bp++ = 0x14; + *bp++ = 0; + *bp++ = 0xa0; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + *bp++ = 1; + *bp++ = 0; + *bp++ = 0; + + *bp++ = 1; + *bp++ = 0x14; + *bp++ = 0; + *bp++ = 0xa1; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + *bp++ = 1; + *bp++ = 0; + *bp++ = 0; + + *bp++ = 1; + *bp++ = 0x14; + *bp++ = 0; + *bp++ = 0xa2; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); + if (msf) { + *bp++ = 0; + lba_to_msf(bp, sectors); + bp += 3; + } else { + *(uint32_t *)bp = cpu_to_be32(sectors); + bp += 4; + } + + *bp++ = 1; + *bp++ = 0x14; + *bp++ = 0; + *bp++ = 1; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + if (msf) { + *bp++ = 0; + lba_to_msf(bp, 0); + bp += 3; + } else { + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + *bp++ = 0; + } + + size = bp - buf; + *(uint16_t*)buf = cpu_to_be16(size - 2); + if (len > size) + len = size; + write_prdt(p, slot, cfis, buf, len); + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); + break; + } + default: + { + uint32_t tfd; + p->sense_key = ATA_SENSE_ILLEGAL_REQUEST; + p->asc = 0x24; + tfd = (p->sense_key << 4) | ATA_S_READY | ATA_S_ERROR; + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, tfd); + break; + } + } +} + +static void handle_packet_cmd(struct ahci_port *p, int slot, uint8_t *cfis) { uint8_t *acmd = cfis + 0x40; @@ -641,11 +837,9 @@ ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); break; case ATAPI_INQUIRY: - cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; atapi_inquiry(p, slot, cfis); break; case ATAPI_READ_CAPACITY: - cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; atapi_read_capacity(p, slot, cfis); break; case ATAPI_PREVENT_ALLOW: @@ -653,6 +847,9 @@ cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); break; + case ATAPI_READ_TOC: + atapi_read_toc(p, slot, cfis); + break; default: break; } From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:03:04 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 3502A909 for ; Sat, 14 Sep 2013 16:03:04 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 081FE2D8E for ; Sat, 14 Sep 2013 16:03:04 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG33sA072322 for ; Sat, 14 Sep 2013 16:03:03 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG33LY072320 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:03:03 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:03:03 GMT Message-Id: <201309141603.r8EG33LY072320@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257337 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:03:04 -0000 Author: zcore Date: Sat Sep 14 16:03:03 2013 New Revision: 257337 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257337 Log: remove '^M' in log Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:02:39 2013 (r257336) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:03:03 2013 (r257337) @@ -1218,7 +1218,7 @@ offset = (offset - AHCI_OFFSET) % AHCI_STEP; struct ahci_port *p = &sc->port[port]; - DPRINTF(("pci_ahci_port %d: write offset 0x%"PRIx64" value 0x%"PRIx64"\n\r", + DPRINTF(("pci_ahci_port %d: write offset 0x%"PRIx64" value 0x%"PRIx64"\n", port, offset, value)); switch (offset) { case AHCI_P_CLB: @@ -1309,7 +1309,7 @@ static void pci_ahci_host_write(struct pci_ahci_softc *sc, uint64_t offset, uint64_t value) { - DPRINTF(("pci_ahci_host: write offset 0x%"PRIx64" value 0x%"PRIx64"\n\r", + DPRINTF(("pci_ahci_host: write offset 0x%"PRIx64" value 0x%"PRIx64"\n", offset, value)); switch (offset) { @@ -1352,7 +1352,7 @@ else if (offset < AHCI_OFFSET + sc->ports * AHCI_STEP) pci_ahci_port_write(sc, offset, value); else - DPRINTF(("pci_ahci: unknown i/o write offset 0x%"PRIx64"\n\r", offset)); + DPRINTF(("pci_ahci: unknown i/o write offset 0x%"PRIx64"\n", offset)); pthread_mutex_unlock(&sc->mtx); } @@ -1383,7 +1383,7 @@ value = 0; break; } - DPRINTF(("pci_ahci_host: read offset 0x%"PRIx64" value 0x%x\n\r", + DPRINTF(("pci_ahci_host: read offset 0x%"PRIx64" value 0x%x\n", offset, value)); return (value); @@ -1423,7 +1423,7 @@ value = 0; break; } - DPRINTF(("pci_ahci_port %d: read offset 0x%"PRIx64" value 0x%x\n\r", + DPRINTF(("pci_ahci_port %d: read offset 0x%"PRIx64" value 0x%x\n", port, offset, value)); return value; @@ -1446,7 +1446,7 @@ else if (offset < AHCI_OFFSET + sc->ports * AHCI_STEP) value = pci_ahci_port_read(sc, offset); else - DPRINTF(("pci_ahci: unknown i/o read offset 0x%"PRIx64"\n\r", offset)); + DPRINTF(("pci_ahci: unknown i/o read offset 0x%"PRIx64"\n", offset)); pthread_mutex_unlock(&sc->mtx); From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:03:47 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 3B27592F for ; Sat, 14 Sep 2013 16:03:47 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 284A92D93 for ; Sat, 14 Sep 2013 16:03:47 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG3ltv086368 for ; Sat, 14 Sep 2013 16:03:47 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG3lUi086363 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:03:47 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:03:47 GMT Message-Id: <201309141603.r8EG3lUi086363@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257338 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:03:47 -0000 Author: zcore Date: Sat Sep 14 16:03:46 2013 New Revision: 257338 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257338 Log: correct ATAPI sectors Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:03:03 2013 (r257337) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:03:46 2013 (r257338) @@ -637,6 +637,7 @@ uint32_t *ptr = (uint32_t *)buf; sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); + sectors >>= 2; ptr[0] = cpu_to_be32(sectors - 1); ptr[1] = cpu_to_be32(2048); cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; @@ -694,6 +695,7 @@ *bp++ = 0xaa; *bp++ = 0; sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); + sectors >>= 2; if (msf) { *bp++ = 0; lba_to_msf(bp, sectors); @@ -770,6 +772,7 @@ *bp++ = 0; *bp++ = 0; sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); + sectors >>= 2; if (msf) { *bp++ = 0; lba_to_msf(bp, sectors); From owner-svn-soc-all@FreeBSD.ORG Sat Sep 14 16:04:22 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B287C93E for ; Sat, 14 Sep 2013 16:04:22 +0000 (UTC) (envelope-from zcore@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 9055A2D94 for ; Sat, 14 Sep 2013 16:04:22 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r8EG4M1L092587 for ; Sat, 14 Sep 2013 16:04:22 GMT (envelope-from zcore@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r8EG4MYH092581 for svn-soc-all@FreeBSD.org; Sat, 14 Sep 2013 16:04:22 GMT (envelope-from zcore@FreeBSD.org) Date: Sat, 14 Sep 2013 16:04:22 GMT Message-Id: <201309141604.r8EG4MYH092581@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zcore@FreeBSD.org using -f From: zcore@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257339 - soc2013/zcore/head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 16:04:22 -0000 Author: zcore Date: Sat Sep 14 16:04:22 2013 New Revision: 257339 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257339 Log: support ATAPI_READ_BIG Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Modified: soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:03:46 2013 (r257338) +++ soc2013/zcore/head/usr.sbin/bhyve/pci_ahci.c Sat Sep 14 16:04:22 2013 (r257339) @@ -182,6 +182,11 @@ return (val[0] << 8) | val[1]; } +static inline uint16_t be32_to_cpu(uint8_t *val) +{ + return (val[0] << 24) | (val[1] << 16) | (val[2] << 8) | val[3]; +} + static inline void lba_to_msf(uint8_t *buf, int lba) { lba += 150; @@ -666,7 +671,7 @@ uint32_t tfd; p->sense_key = ATA_SENSE_ILLEGAL_REQUEST; p->asc = 0x24; - tfd = (p->sense_key << 4) | ATA_S_READY | ATA_S_ERROR; + tfd = (p->sense_key << 12) | ATA_S_READY | ATA_S_ERROR; cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; ahci_write_fis_d2h(p, slot, cfis, tfd); return; @@ -814,7 +819,7 @@ uint32_t tfd; p->sense_key = ATA_SENSE_ILLEGAL_REQUEST; p->asc = 0x24; - tfd = (p->sense_key << 4) | ATA_S_READY | ATA_S_ERROR; + tfd = (p->sense_key << 12) | ATA_S_READY | ATA_S_ERROR; cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; ahci_write_fis_d2h(p, slot, cfis, tfd); break; @@ -823,6 +828,59 @@ } static void +atapi_read(struct ahci_port *p, int slot, uint8_t *cfis) +{ + int i, err; + uint64_t lba; + uint32_t len; + struct ahci_ioreq *aior; + struct blockif_req *breq; + uint8_t *acmd = cfis + 0x40; + struct pci_ahci_softc *sc = p->pr_sc; + struct ahci_prdt_entry *prdt = (struct ahci_prdt_entry *)(cfis + 0x80); + struct ahci_cmd_hdr *hdr = p->cmd_lst + slot * AHCI_CL_SIZE; + + if (!p->iofree) { + p->unhandled_read |= (1 << slot); + return; + } + lba = be32_to_cpu(acmd + 2); + len = be16_to_cpu(acmd + 7); + if (len == 0) { + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC); + } + lba *= 2048; + len *= 2048; + + /* + * Pull request off free list + */ + aior = STAILQ_FIRST(&p->iofhd); + assert(aior != NULL); + STAILQ_REMOVE_HEAD(&p->iofhd, io_list); + p->iofree--; + aior->cfis = cfis; + aior->slot = slot; + aior->len = len; + breq = &aior->io_req; + breq->br_offset = lba; + breq->br_iovcnt = hdr->prdtl; + + /* + * Build up the iovec based on the prdt + */ + for (i = 0; i < hdr->prdtl; i++) { + breq->br_iov[i].iov_base = paddr_guest2host(ahci_ctx(sc), + prdt->dba, prdt->dbc + 1); + breq->br_iov[i].iov_len = prdt->dbc + 1; + prdt++; + } + err = blockif_read(p->bctx, breq); + assert(err == 0); +} + +static void handle_packet_cmd(struct ahci_port *p, int slot, uint8_t *cfis) { uint8_t *acmd = cfis + 0x40; @@ -853,6 +911,9 @@ case ATAPI_READ_TOC: atapi_read_toc(p, slot, cfis); break; + case ATAPI_READ_BIG: + atapi_read(p, slot, cfis); + break; default: break; } @@ -1023,7 +1084,7 @@ * i/o thread, so the mutex needs to be acquired. */ static void -pci_ahci_ioreq_cb(struct blockif_req *br, int err) +ata_ioreq_cb(struct blockif_req *br, int err) { struct ahci_port *p; struct pci_ahci_softc *sc; @@ -1032,7 +1093,7 @@ struct ahci_cmd_hdr *hdr; int ncq = 0; - DPRINTF(("ahci_ioreq_cb %d\n", err)); + DPRINTF(("%s %d\n", __func__, err)); aior = br->br_param; p = aior->io_pr; @@ -1095,6 +1156,68 @@ } static void +atapi_ioreq_cb(struct blockif_req *br, int err) +{ + uint8_t *cfis; + uint32_t tfd; + struct ahci_port *p; + struct pci_ahci_softc *sc; + struct ahci_ioreq *aior; + struct ahci_cmd_hdr *hdr; + + DPRINTF(("%s %d\n", __func__, err)); + + aior = br->br_param; + p = aior->io_pr; + sc = p->pr_sc; + hdr = p->cmd_lst + aior->slot * AHCI_CL_SIZE; + + pthread_mutex_lock(&sc->mtx); + + if (!err) { + tfd = ATA_S_READY | ATA_S_DSC; + hdr->prdbc = aior->len; + } else { + p->sense_key = ATA_SENSE_ILLEGAL_REQUEST; + p->asc = 0x21; + tfd = (p->sense_key << 12) | ATA_S_READY | ATA_S_ERROR; + hdr->prdbc = 0; + } + + cfis = aior->cfis; + cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; + ahci_write_fis_d2h(p, aior->slot, cfis, tfd); + + /* + * Move the blockif request back to the free list + */ + STAILQ_INSERT_TAIL(&p->iofhd, aior, io_list); + p->iofree++; + + /* + * If the number of oustanding commands has dropped below the + * threshold, see if more can be queued up + */ + if (p->ioqsz - p->iofree <= 2 && (p->cmd & AHCI_P_CMD_ST)) { + int i; + uint32_t unhandled = p->unhandled_read; + for (i = 0; (i < 32) && unhandled; i++) { + if (!p->iofree) + break; + if (unhandled & (1 << i)) { + handle_slot(p, i); + unhandled &= ~(1 << i); + } + } + p->unhandled_read &= unhandled; + } + + pthread_mutex_unlock(&sc->mtx); + DPRINTF(("%s exit\n", __func__)); + +} + +static void pci_ahci_ioreq_init(struct ahci_port *pr) { struct ahci_ioreq *vr; @@ -1110,7 +1233,10 @@ for (i = 0; i < pr->ioqsz; i++) { vr = &pr->ioreq[i]; vr->io_pr = pr; - vr->io_req.br_callback = pci_ahci_ioreq_cb; + if (!pr->atapi) + vr->io_req.br_callback = ata_ioreq_cb; + else + vr->io_req.br_callback = atapi_ioreq_cb; vr->io_req.br_param = vr; STAILQ_INSERT_TAIL(&pr->iofhd, vr, io_list); pr->iofree++;